Фильтрация связанных цветов в администраторе Django на основе выбора продуктаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Фильтрация связанных цветов в администраторе Django на основе выбора продукта

Сообщение Anonymous »

Постановка проблемы:
Я работаю над проектом Django, в котором у меня есть две модели: Product и Color. Модель Product имеет связь «многие ко многим» с моделью Color через поле Product_varients. Моя цель — отфильтровать доступные цвета в интерфейсе администратора Django на основе выбранного продукта. В частности, я хочу, чтобы при создании или редактировании цвета поле product_varients отображало только цвета, которые еще не связаны с этим продуктом
Модели:
Вот соответствующие части моих моделей:

Код: Выделить всё

from django.db import models
from shortuuid.django.fields import ShortUUIDField

class Color(models.Model):
coid = ShortUUIDField(length=10, max_length=100, prefix="col", alphabet="abcdefgh")
name = models.CharField(max_length=20)
product_varients = models.ManyToManyField('Product', related_name='color_variants', blank=True)

def __str__(self):
return self.name

class Product(models.Model):
pid = ShortUUIDField(length=10, max_length=100, prefix="prd", alphabet="abcdef")
title = models.CharField(max_length=100, default="Apple")
color = models.ManyToManyField(Color, blank=True)

def __str__(self):
return self.title
Текущая реализация:
В моем admin.py я реализовал специальную форму для Модель цвета для фильтрации поля Product_varients. Вот соответствующий код:

Код: Выделить всё

class ColorAdminForm(forms.ModelForm):
class Meta:
model = Color
fields = '__all__'

def __init__(self, *args, **kwargs):
super(ColorAdminForm, self).__init__(*args, **kwargs)

if self.instance.pk:  # Editing an existing color
self.fields['product_varients'].queryset = Product.objects.exclude(
color=self.instance  # Exclude products that already have this color
)
else:  # Creating a new color
self.fields['product_varients'].queryset = Product.objects.all()

class ColorAdmin(admin.ModelAdmin):
form = ColorAdminForm
Возникла проблема:
Хотя логика фильтрации кажется правильной, я столкнулся со следующими проблемами:
  • Поле Product_varients отображается неправильно, когда я пытаюсь создать или изменить цвет. Здесь отображаются все продукты, а не исключаются те, которые уже связаны с цветом.
  • Я хочу убедиться, что при создании нового цвета отображаются только товары, с которыми еще не связан этот цвет.
Вопросы:
  • Как правильно фильтровать поле product_varients в администраторе Django, чтобы оно отображает только продукты, которые еще не связаны с выбранным цветом?
  • Есть ли лучший подход для реализации этой фильтрации в интерфейсе администратора Django?


Подробнее здесь: https://stackoverflow.com/questions/791 ... -selection
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Фильтрация связанных цветов в администраторе Django на основе выбора продукта
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Фильтрация в администраторе Django для нескольких условий в одной записи
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Фильтрация связанных объектов в сериализаторе DRF на основе разрешения пользователя
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Проблема с отображением всех цветов варианта продукта в шаблоне Django
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Проблема с отображением всех цветов варианта продукта в шаблоне Django
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»