Django: limit_choices_to (Is this correct)

Deadly 提交于 2019-12-17 22:22:54

问题


Is this correct?

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'})

I'm trying to make sure that an Order form will only display customer choices that belong to the same account as the Order.

If I'm overlooking some glaring bad-design fallacy, let me know.

The main thing I'm concerned with is:

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

回答1:


The only answer to 'is it correct' is 'does it work when you run it?' The answer to that of course is no, so I don't know why you're asking here.

There's no way to use limit_choices_to dynamically to limit based on the value of another field in the current model. The best way to do this is by customising the form. Define a ModelForm subclass, and override the __init__ method:

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)



回答2:


You should set choices field of your order form (inherited from ModelForm) in the constructor.




回答3:


limit_choices_to={'account': 'self.account'} is wrong, since foreign key to customer cannot point to Account.



来源:https://stackoverflow.com/questions/1968596/django-limit-choices-to-is-this-correct

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!