由对象内容填充的Django表单不令人耳目一新

时间:2016-11-20 01:29:42

标签: django

我是Django的新手,可能犯了一个错误。

我创建了包含以下内容的forms.py:

from django import forms
class CustForm(forms.Form):
    OPTIONS = ([(account.id, account) for account in Account.objects.filter(active=True)])
    CustId = forms.ChoiceField(widget=forms.Select, choices=OPTIONS)

在views.py中:

from .forms import CustForm

def listcust(request):

    if request.method == 'POST':
        form = CustForm(request.POST)
        if form.is_valid():
            customer = form.cleaned_data.get('CustId')

            applist = Appliance.objects.filter(cslic=customer)
            customer = Account.objects.get(id=customer)
            return render(request, 'addapp/listapp.html', {'customer' : customer, 'applist' : applist })
    else:
        form = CustForm()
    return render(request, 'addapp/listcust.html', {'form':form })

这有效,但如果我更改了"有效"在重新启动/重新加载Apache之前,帐户的属性,下拉菜单的内容不会改变。

你能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

这是因为它在运行时执行查询。

一种方法是使用ModelChoiceField

https://docs.djangoproject.com/en/dev/ref/forms/fields/#modelchoicefield

另一种方法是使用方法或lambda返回OPTIONS。

另一种方法是在类的 init 中进行操作。