Выбор моделей Django ограничен на основе другой модели, но с определенным значением поля - PullRequest
1 голос
/ 23 апреля 2019

У меня есть 2 модели, упрощенные для этого вопроса. В модели Article как я могу ограничить choices= поля Article.status на основе записей в модели Category, которые имеют конкретное значение Category.type?

class Article(models.Model):
  name = models.CharField(max_length=100)
  # Set choices= only to values of Category which have a type of 'foo'
  status = models.ForeignKey(Category)

class Category(models.Model):
  name = models.CharField(max_length=10)
  type = models.CharField(max_length=10)

Для прозрачности, я знаю, что делал это раньше, но я не могу вспомнить, как или найти проект, где я это сделал. Как будто решение только что исчезло на мне ... * пуф *. Магия.

РЕДАКТИРОВАТЬ: изменено на models.ForeignKey.

1 Ответ

1 голос
/ 23 апреля 2019

Вы можете использовать что-то вроде limit_choices_to в вашем models.py:

category = model.ForeignKey(Category,limit_choices_to={'type':'the type you want'}

Если вы хотите что-то более динамичное или более подробное, вы можете указать свой пользовательский набор запросов для определенного поля в init для ModelForm, например:

self.fields['category'].queryset = Category.objects.filter(type='type_you_wanted')

Если вы хотите отобразить динамическую категорию в зависимости от того, какой тип category.type выбран, то вы должны увидеть это: https://simpleisbetterthancomplex.com/tutorial/2018/01/29/how-to-implement-dependent-or-chained-dropdown-list-with-django.html

...