python - 在 Django 表单中保存默认值

标签 python django django-models django-forms

我有一个 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/

相关文章:

python - 如何在虚拟环境中使用源码安装Django?

python - 如何使用唯一约束更新 Django 中的对象列表?

python - 我会称之为高级元组操作吗?

python - 有条件地将命名关键字参数传递给函数

python - 将 Python 列表写入 csv 文件

django - 如何在Django管理员中翻译函数名称?

python - 如何创建 django 子类别

python - 为 Python 2.6 添加 SSL 支持

来自相关模型的 django 管理显示字段

python - Django:多对多关系的自定义保存方法