Предположим, у меня есть модель данных для Pen. Ручки могут быть сделаны из металла или дерева. Металлические ручки могут быть серебряными или белыми Деревянные ручки могут быть синими или зелеными. поэтому не должно быть металлической ручки в синем.Django - настройка вида добавления страницы администратора
Есть ли способ заменить выбор материала в кнопке добавления, чтобы отобразить комбинацию имени/цвета материала? Я думаю, что должен быть трюк с полями.
# model.py
from django.db import models
class Color(models.Model):
color = models.CharField(max_length=20, primary_key=True)
def __unicode__(self):
return self.color
class Material(models.Model):
type = models.CharField(max_length=20)
color = models.OneToOneField(Color)
def __unicode__(self):
return "%s_%s" % (str(self.color), self.type)
class Pen(models.Model):
id = models.AutoField(primary_key=True)
label = models.CharField(max_length=20)
material = models.ForeignKey(Material)
def __unicode__(self):
return "%s_%s" % (str(self.material), self.label)
# admin.py
from django.contrib import admin
from .models import Material, Color, Pen
class PenAdmin(admin.ModelAdmin):
list_display = ('label', 'material', 'get_color',)
fieldsets = (
(None, {
'fields': ('label', 'material')
}),
)
def get_color(self, obj):
return obj.material.color
get_color.short_description = 'Color'
admin.site.register(Pen, PenAdmin)
admin.site.register(Material)
admin.site.register(Color)