gpt4 book ai didi

python - 使用 Django 1.6 从 2 个模型构建表单的最佳方法是什么

转载 作者:行者123 更新时间:2023-11-28 17:43:24 26 4
gpt4 key购买 nike

对于一个小应用程序,我定义了两个模型:

class Pressure (models.Model):
user = models.ForeignKey(User)
sys = models.FloatField(blank=False, null=False, verbose_name=_(u"systolic"))
dia = models.FloatField(blank=False, null=False, verbose_name=_(u"diastolic"))
pulse = models.IntegerField(blank=False, null=False, verbose_name=_(u"Pulse"))
timestamp = models.DateTimeField(verbose_name=_(u"Messurement timestamp"))

def __unicode__(self):
return self.timestamp.strftime("%y-%m-%d: %H-%M")

class Weight(models.Model):
user = models.ForeignKey(User)
weight = models.FloatField(blank=False, null=False, verbose_name=_(u"Weight"))
timestamp = models.DateTimeField(verbose_name=_(u"Messurement timestamp"))

def __unicode__(self):
return self.timestamp.strftime("%y-%m-%d: %H-%M")

不,我想为这两个模型构建一个合并表单,其中用户和时间戳对于两个模型都是相同的。其余文件应该是可选的。这意味着,如果没有给出,例如权重,不得插入数据库等。

我正在阅读有关 mixin 和一些表单集的信息,但对这里最好的方法是什么一无所知。

最佳答案

您不需要一个表单来处理这个问题。您只需要一个 View 来处理两个模型的表单。基本思想很简单:创建两个表单类并将它们呈现给呈现在同一个 <form> 中的用户。元素。在提交时,检查两个表单是否有效,然后将它们都保存起来并将用户发送到下一页。它看起来像这样:

from django import forms
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect
from django.utils.timezone import now

from .models import Pressure, Weight


class PressureForm(forms.ModelForm):

class Meta:
model = Pressure
exclude = ('user', 'timestamp', )


class WeightForm(forms.ModelForm):

class Meta:
model = Weight
exclude = ('user', 'timestamp', )


@login_required
def submit(request):
if request.method == 'POST'
pressure_form = PressureForm(request.POST)
weight_form = WeightForm(request.POST)
if all(form.is_valid() for form in [pressure_form, weight_form]):
record_time = now()
pressure = pressure_form.save(commit=False)
pressure.timestamp = record_time
pressure.user = request.user
pressure.save()
weight = weight_form.save(commit=False)
weight.timestamp = record_time
weight.user = request.user
weight.save()
return redirect('<insert-name-of-success-url>')
else:
pressure_form = PressureForm()
weight_form = WeightForm()
context = {
'pressure_form': pressure_form,
'weight_form': weight_form,
}
return render(request, '<insert-template-name>', context)

您不需要表单集或通用 View 来处理它。这是一个简单明了的观点。如果您发现自己经常重复这种模式,那么您可能会考虑创建一些 View 类来处理这种情况。没有任何内置泛型会为您做这件事。

关于python - 使用 Django 1.6 从 2 个模型构建表单的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21364451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com