Подтвердить что ты не робот

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'}
4b9b3361

Ответ 1

Единственный ответ на вопрос "правильно ли это": "работает ли он, когда вы его запускаете?" Ответ на это, конечно, нет, поэтому я не знаю, почему вы спрашиваете здесь.

Нет возможности использовать 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)

Ответ 2

В конструкторе вы должны установить поле choices вашей формы заказа (унаследовано от ModelForm).

Ответ 3

limit_choices_to={'account': 'self.account'} неверно, поскольку внешний ключ для клиента не может указывать на Account.