没有查询带外键的Django表单

时间:2011-11-14 00:54:39

标签: django forms foreign-keys

我正在构建一个django表单

我的模型是客户有一个愿望清单。顾客可以有许多愿望清单项目。我从客户视图中添加了一个愿望清单项。我的问题是,当我渲染我的愿望清单时,它会与所有客户一起下载。通过设置editable=False来消除下拉。但现在我想在表单上显示不可编辑的项目。并在提交时传递不可编辑的值。

如果我在Wishlist.customer上将editable设置为false,我可以:

  1. 在视图中设置此值并将其传递给html以进行显示 仅

  2. 将不可编辑的wishlist.customer传回表单提交以进行处理?

  3. --------- models.py ------------

    class WishList(models.Model):
        customer = models.ForeignKey(Customer, editable=False)
        year = models.CharField(max_length=4, blank=True)
        item = models.CharField(max_length=20, blank=True)
        color = models.CharField(max_length=20, blank=True)
        sold = models.BooleanField(default=False)
    

    -------- forms.py ------------

    class WishListForm(forms.ModelForm):
        class Meta:
            model = WishList
            fields = ['carType', 'year', 'make', 'model', 'miles', 'color', ]
    

    -------- ------------- views.py

    @login_required
    def newWishList(request, customer_id):
        cust = Customer.objects.get(pk=customer_id)
        return handlePopAdd(request, WishListForm, cust, 'wishList')
    
    def handlePopAdd(request, addForm, customer, field):
        if request.method == "POST":
            form = addForm(request.POST)
            if form.is_valid(): 
                newObject = form.save()
        else: 
            form = addForm()
            # Here I want to set the customer and have it displayed, not editable
            form.customer=customer
        pageContext = {'form': form, 'field': field}
        return render_to_response("popuptemplate.html", pageContext)
    

1 个答案:

答案 0 :(得分:0)

首先,您的表单定义中似乎有拼写错误:它显示为felds而不是fields。它还列出了我在代码中没有看到的一些字段名称,因此根据此代码段可能不会做太多。

我要做的就是在ModelForm中列出您想要编辑的字段(正如您目前所做的那样)。然后要么包含客户字段,要么按照here概述覆盖其显示属性:设置了CharField属性的readonly

另一个选择(我个人的偏好)是让客户完全离开表单并在模板中呈现客户名称,而根本不将其作为表单的一部分。将其放在表单上方的标题标记中,以明确客户的数据。