【发布时间】:2017-10-28 00:58:04
【问题描述】:
我有一个产品、类别和子类别的实体。一个品类可以有很多产品,一个品类也可以有很多子品类。例如,名为 Iphone-4 的产品可能属于电子和小工具类别的智能手机子类别。类似的 samsung 产品可以属于 Electronics&Gadgets 类别的相同智能手机子类别。我怎样才能有效地展示这种关系?
这就是我所做的
class Category(models.Model):
name = models.CharField(max_length=80, null=True)
parent = models.ForeignKey('self', blank=True, null=True, related_name="children")
class Meta:
unique_together = ('parent',)
verbose_name = 'Category'
verbose_name_plural = 'Categories'
class Product(models.Model):
token = models.CharField(default=token_generator, max_length=20, unique=True, editable=False)
category = models.ForeignKey(Category)
company = models.ForeignKey(Company, related_name="company_product")
name = models.CharField(max_length=200, null=True)
model = models.CharField(max_length=100, blank=True, null=True)
specification = models.TextField(null=True, blank=True)
price = models.PositiveIntegerField(default=0)
admin.py
class ProductAdmin(admin.ModelAdmin):
list_select_related = ('category', 'company',)
class Meta:
model = Product
class CategoryAdmin(admin.ModelAdmin):
list_select_related = ('parent',)
list_display = ('name', 'parent', )
class Meta:
model = Category
这样在我的管理员中,类别和子类别显示得非常模糊。电子产品和小工具类别多次显示。它按照属于此类别的子类别的数量显示。 这是预期的行为还是必须以其他有效方式处理?
【问题讨论】:
-
您必须在第一列中列出级别为 -1 的类别,然后在第二列中以逗号分隔子类别。您也可以在第二列中仅显示一个子类别,然后创建一个链接以显示所有子类别及其子类别等等..
-
我必须在 admin.py 中做这些事情吗?你能告诉我一些小东西或伪代码吗?
-
我对python了解不多。您必须在级别 -1 对所有类别进行分页,然后使用子查询来获取所有子类别。
标签: python django django-models django-admin