我有一个 Django 模板,其中使用两种不同的形式:
views.py
def myview(request):
if request.method == 'POST':
form = TradingForm(request.POST)
if form.is_valid():
profile = form.save(commit=False)
profile.user = request.user
profile.save()
messages.success(request, f"Success")
# if a GET (or any other method) we'll create a blank form
else:
form = MyForm()
context = {
'first_form': FirstForm(request.POST or None),
'second_form': SecondForm(request.POST or None),
}
return render(request, "main/template.html", context)
form.py
class FirstForm(forms.ModelForm):
rate = forms.CharField()
amount = forms.FloatField()
class Meta:
model = MyModel
fields = ("rate", "amount")
def save(self, commit=True):
send = super(MyForm, self).save(commit=False)
if commit:
send.save()
return send
class SecondForm(forms.ModelForm):
rate = forms.CharField()
amount = forms.FloatField()
class Meta:
model = MyModel
fields = ("firstfield", "secondfield")
def save(self, commit=True):
send = super(MyForm, self).save(commit=False)
if commit:
send.save()
return send
如您所见,这两个表单使用相同的模型,但它们具有不同的字段,因此用户将提交这些字段,数据将保存在我的数据库中:
class Trade(models.Model):
amount = models.FloatField()
rate = models.FloatField()
formtype = models.CharField(max_length=20)
user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True, editable=False)
def save(self): # ALL the signature
super(Trade, self).save()
用户提交字段金额
和费率
。 user
字段不是由用户提交的,而是由 Django 保存的。还有第四个字段,formtype
字段。该字段不能由用户提交,而是“自动”提交,就像保存字段 user
一样。
示例:如果用户在我的数据库中使用第一个表单,在 formtype
列下方,我应该看到 FirstForm
,如果用户从第二种形式。我不知道我想要实现的目标是否明确,但我想知道如何在 Django 中实现这一目标(如果有办法的话)。感谢每一个建议!
最佳答案
由于您已经覆盖了 save
,因此您可以将其添加到模型实例中:
class FirstForm(forms.ModelForm):
...
def save(self, commit=True):
send = super(MyForm, self).save(commit=False)
send.formtype = 'FirstForm'
if commit:
send.save()
return send
关于python - 在 Django 表单中保存默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57260912/