Django:limit_choices_to(这是否正确)
这是正确的吗?Django:limit_choices_to(这是否正确)
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'}
“它是否正确”的唯一答案是'它运行时是否有效?'当然,答案是否定的,所以我不知道你为什么问这里。
根据当前模型中另一个字段的值,无法动态使用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)
仅仅因为它对我不起作用并不意味着它必须是错误的方法。我问,因为Django网站上没有关于此功能的明确文档,我不确定我的语法是否正确。 – orokusaki 2009-12-28 17:24:32
这也是好的,如果你需要在课堂MyOrderForm要求OBJ - > http://stackoverflow.com/a/6062628/758202 – zzart 2013-03-07 09:15:30
是的,这是不是在文档非常清晰。我想问题是'limit_choices_to'是ForeignKey函数的一个参数,并且该函数必须被分配给一个类成员。在这个层面上,“自我”意味着什么。为了使它工作,'Django'应该有一个在'__init__'中工作的过滤函数,而且据我所知,它没有一个。 – 2014-11-16 16:54:31
limit_choices_to={'account': 'self.account'}
是错误的,因为外键的客户不能指向Account
。
尽管客户有“帐户”属性。仍然是这种情况? – orokusaki 2009-12-28 17:19:16
您应该在构造函数中设置您的订单的choices
字段(从ModelForm
继承)。
不理解您的问题。你能更清楚吗? – Mayuresh 2009-12-28 11:02:06