Это корректно?
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)
В конструкторе необходимо установить поле выбора
формы заказа (наследуется от ModelForm
).
limit_choices_to={'account': 'self.account'}
неправильно, так как посторонний ключ клиента не может указывать на Account
.