Задать вопрос
vikkyshostak
@vikkyshostak
< This head full of dreams.

Django. Как исключить из FK поля инлайновой модели нужные значения?

Приветствую.

Django 2.0.3, Python 3.6.1.

Подскажите, пожалуйста, как исключить (сделать фильтр) из QuerySet поля инлайновой модели нужные значения?

Вот мой код:

# ./app/models.py

class Product(models.Model):
    name = models.CharField(max_length=255)

class Color(models.Model):
    name = models.CharField(max_length=255) # ['blue', 'red', 'yellow'] для примера

class Price(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    color = models.ForeignKey(Color, on_delete=models.CASCADE)
    price = models.PositiveSmallIntegerField()


# ./app/admin.py

class PriceInlineAdmin(admin.TabularInline):
    model = Price

@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    list_display = ('id',)
    inlines = [
        PriceInlineAdmin
    ]

Собственно, как в инлайн-модели PriceInlineAdmin исключить из поля color (которое отображается, как select, ибо ForeignKey) запись со значением blue?

Буду рад толковым советам.
Заранее спасибо!
  • Вопрос задан
  • 362 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Django: создание backend-приложений
    7 недель
    Далее
  • Skillbox
    Python-фреймворк Django
    3 месяца
    Далее
  • ProductStar
    Django + Python разработка
    2 месяца
    Далее
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Из документации:
class PriceInlineAdmin(admin.TabularInline):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == 'color':
            kwargs['queryset'] = Color.objects.all().exclude(name='blue')
        return super().formfield_for_foreignkey(db_field, request, **kwargs)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
В класс PriceInlineAdmin добавь форму.
В классе формы:
def __init__(self, *args, **kwargs):
  super(PriceForm, self).__init__(*args, **kwargs)
  self.fields['color'].queryset = Color.objects.filter(~Q(name="blue"))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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