Django:limit_choices_to(这是对的)

时间:2009-12-28 08:56:15

标签: django django-models foreign-keys

这是对的吗?

class Customer(models.Model):
    account = models.ForeignKey(Account)


class Order(models.Model):
    account = models.ForeignKey(Account)
    customer = models.ForeignKey(Customer, limit_choices_to={'account': 'self.account'})

我正在尝试确保订单表单只显示与订单属于同一帐户的客户选择。

如果我忽略了一些明显不好的设计谬误,请告诉我。

我最关心的是:

limit_choices_to={'account': 'self.account'}

3 个答案:

答案 0 :(得分:16)

“正确”的唯一答案是“运行时它是否有效?”答案当然是否定的,所以我不知道你为什么在这里问。

无法动态使用limit_choices_to来根据当前模型中另一个字段的值进行限制。最好的方法是自定义表单。定义ModelForm子类,并覆盖__init__方法:

class MyOrderForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(MyOrderForm, self).__init__(*args, **kwargs)
        if 'initial' in kwargs:
             self.fields['customer'].queryset = Customer.objects.filter(account=initial.account)

答案 1 :(得分:0)

您应该在构造函数中设置订单的choices字段(从ModelForm继承)。

答案 2 :(得分:-1)

limit_choices_to={'account': 'self.account'}错误,因为客户的外键不能指向Account