如何自定义Django ModelForm

时间:2014-06-15 02:00:01

标签: django forms model django-1.5

我想根据我的客户模型构建表单。

在表单中,登录用户指定收款人,键入金额并选择他想要支付的帐户。

这是迄今为止的模型和形式:

class Payment(models.Model):
    payee = models.ForeignKey(Customer)
    amount = models.IntegerField()
    accounts = models.ManyToManyField(BankAccount)


class PaymentForm(forms.ModelForm): 

    class Meta:    
        model = Customer
        widgets = {
            'accounts': forms.CheckboxSelectMultiple(),
        }

此表单的问题在于,它为系统中存在的每个可能帐户生成一个复选框,无论用户是否实际使用该帐户。可能有几十种类型的帐户,而用户可能只有3或4个帐户。

我希望表单只为用户拥有的帐户提供复选框。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以在表单__init__或视图中覆盖它:

# whatever you use as user/customer, filter out accounts owned
accounts = BankAcount.objects.filter(user=request.user) 
form = PaymentForm()
form.fields['accounts'].queryset = accounts