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'}
22
задан orokusaki 28 December 2009 в 08:56
поделиться

3 ответа

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

Невозможно динамически использовать 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)
16
ответ дан 29 November 2019 в 05:48
поделиться

В конструкторе необходимо установить поле выбора формы заказа (наследуется от ModelForm).

.
0
ответ дан 29 November 2019 в 05:48
поделиться

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

.
-1
ответ дан 29 November 2019 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: