Фильтр 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 по созданию запросов также хорошо отвечает на этот вопрос.