У меня есть Category
модель
class Category(models.Model):
name = models.CharField(max_length=120,default='', verbose_name=_('name'))
color = ColorField(default='#FF0000')
и Product
модель
class Product(models.Model):
name = models.CharField(max_length=120)
category = models.ForeignKey(Category, on_delete=models.CASCADE, default=None)
...
На странице администратора продукта я хочу, чтобы категория раскрывалась до показать название с цветом категории. С помощью этого вопроса: Django выбор полей формы, добавление атрибута
Мне удалось создать цветное поле категории на моей странице администратора: введите описание изображения здесь
Это код (добавлен в product / admin.py):
class SelectWOA(Select):
def create_option(self, name, value, label, selected, index,
subindex=None, attrs=None):
option_dict = super(SelectWOA, self).create_option(name, value,
label, selected, index, subindex=subindex, attrs=attrs)
#Category.objects.
try:
option_dict['attrs']['style'] = 'color: ' + Category.objects.get(name=label).color + ';'
except:
pass
return option_dict
from django.forms import ChoiceField, ModelChoiceField
from category.models import Category
class ProductAdminForm(ModelForm):
test_field = ModelChoiceField(queryset=Category.objects.all(), widget=SelectWOA())
class Meta:
model = Product
exclude = ['category']
fields = ('name', 'image', 'image2', 'category', 'test_field',)
from django.db import models
class ProductCastumAdmin(admin.ModelAdmin):
form = ProductAdminForm
, но test_field
не знает, что я хочу, чтобы он «подключился» к category
и замените его. Поэтому, когда я сохраняю форму, данные, которые я помещаю в test field
, не сохраняются как категория. У меня вопрос: после того, как я исключил поле категории, как я могу заменить его на test field
, чтобы можно было сохранить данные, как если бы это было поле категории?