Фильтр Django CreateView foreingkey

Мне нужна помощь. Я пишу приложение с django 1.6 и python 3.4.

Мои модели:

class Account(models.Model):
    number = models.IntegerField()
    name = models.CharField(max_length = 100)
    level = models.IntegerField()
    parent_account = models.ForeignKey(Account, null=True, blank=True) 

Мой взгляд:

class InvoiceCreateView(CreateView):
    model = Account
    template_name = 'account/templates/create.html'
    success_url = reverse_lazy('account_list')   

Затем, когда я создаю новую учетную запись, появляется выпадающий список для выбора родительской учетной записи, все в порядке, но я хочу заполнить этот раскрывающийся список учетными записями с уровнем, равным 2 (пример), а не со всеми учетными записями.

что-то вроде этого:

account.object.all().filter(level=2)

спасибо за продвижение!

2 ответа

Решение

Вы можете создать свою собственную форму и установить переменную form_class в своем представлении как:

class InvoiceCreateView(CreateView):
    model = Account
    form_class = AccountForm
    template_name = 'account/templates/create.html'
    success_url = reverse_lazy('account_list')   

В вашей форме (я назвал ее AccountForm) вы можете определить родительское поле по своему усмотрению:

class AccountForm(forms.ModelForm):

  class Meta(object):
    model = Account

  parent = forms.ModelChoiceField(queryset=Account.objects.filter(level=2))

Я думаю, это то, что вы ищете:

account_list = account.objects.filter(level=2)

Документация Django по созданию запросов также хорошо отвечает на этот вопрос.

Другие вопросы по тегам