我有一个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()
用户提交字段amount
和rate
。 user
字段不是由用户提交的,而是由Django保存的。第四个字段是formtype
字段。此字段不得由用户提交,而是“自动”提交,就像保存字段user
一样。
一个示例:如果用户在我的数据库中的formtype
列下方使用了第一种形式,则我应该看到FirstForm
,如果用户从第二种形式提交了数据,则应该相同。我不知道我要完成的目标是否明确,但是我想知道如何在Django中完成这一目标。每个建议都表示赞赏!
答案 0 :(得分:1)
由于您已经覆盖了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