首页 > 解决方案 > 在我的表单中使用另一个模型的字段时如何将数据插入我的数据库?

问题描述

我有两种不同的模型:Trainer 和 User。我正在将 Trainer 中的 trainer_price 字段拉入我的 User 表单中。请注意,我也没有使用外键。

我遇到的问题是 trainer_price 没有被插入,默认值 0 在那里,这不是我想要的。

用户表单的工作方式是填写他们的姓名、地址、电子邮件,并且一旦他们选择了培训师,就会自动填充 trainer_price。它也是一个只读字段。

这是我到目前为止所尝试的:

用户意见.py

def buyer(request):
    user_form = UserForm()
    trainer_listing = Trainer.objects.get(id=15).trainer_price

    context = {'user_form':user_form, 'trainer_listing':trainer_listing}

    if request.method == "POST":
      user_form = UserForm(request.POST)
      if user_form.is_valid():
        user_form.save()
        return redirect("/success_page")

    return render(request, "user/user_form.html", context)

表格.py

class UserForm(forms.ModelForm):

    Fullname = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'John Doe'}))
    Email = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Email'}))
    Mobile = forms.CharField(widget=forms.TextInput(attrs={'placeholder': '312-222-2222'}))
    Address = forms.CharField(widget=forms.TextInput(attrs={'placeholder': '1234 Main St'}))
    City = forms.CharField()
    State = forms.ChoiceField(choices=STATES)
    zipcode = forms.CharField()
    trainer_price = forms.DecimalField(label="Trainer Price", required=False, widget=forms.TextInput(attrs={'readonly':'readonly'}))

    
    class Meta:
        model = User
        fields = ['Fullname','Email', 'Mobile', 'Address', 'City', 
                    'State', 'zipcode', 'trainer_price']

在正确方向上的任何帮助都会很棒!

标签: python-3.xdjangodjango-modelsdjango-formsdjango-views

解决方案


基本上,我们可以使用initial参数为表单字段设置默认值。

def buyer(request):
    trainer = Trainer.objects.get(id=15)
    user_form = UserForm(initial={"trainer_price": trainer.trainer_price})
    # etc

PS。确保您没有使用来自request.POST. 聪明的用户可以使用它来获得非常便宜的交易。相反,始终重新查询实际值。


推荐阅读