假设我在models.py中有以下模型
class Category(models.Model):
name = models.CharField(max_length=128)
parent = models.ForeignKey('self', null=True, blank=True)
class Item(models.Model):
name = models.CharField(max_length=128)
categories = models.ManyToManyField(Category, related_name='categories')
class Membership(models.Model):
category = models.ForeignKey(Category)
item = models.ForeignKey(Item)
date_assigned = models.DateField()而且,正如在Working with many-to-many intermediary models中所记录的,我在admin.py中有以下内容
class MembershipInline(admin.TabularInline):
model = Membership
extra = 3
class CategoryAdmin(admin.ModelAdmin):
inlines = (MembershipInline,)
class ItemAdmin(admin.ModelAdmin):
inlines = (MembershipInline,)当在管理站点中创建Item时,类别内联表单确实被呈现,但仅仅作为<select>小部件呈现,这有点麻烦,因为每个类别都显示在相同的级别。
我怎样才能把它们渲染成树呢?我不需要非常花哨的东西,在select中进行一些缩进就可以了。
我尝试使用django-mptt和django-treebeard,但它们似乎没有内联的中间多对多模型案例。
发布于 2011-11-30 20:20:25
如果您将物料模型注册到mptt。您可以覆盖unicode方法:
class Item(models.Model):
...
def __unicode__(self):
return '%s%s' % (' ' * self.level, super(MarkerCategory, self).__unicode__())如果您想要一个更干净的解决方案,您应该覆盖表单,并更改小部件,并在此特定小部件中执行此逻辑。
发布于 2011-12-05 02:14:00
我讨厌浏览器是“聪明的”。
from django.utils.safestring import mark_safe
...
class Item(models.Model):
...
def __unicode__(self):
return mark_safe('%s%s' % (' ' * 4 * self.level,
super(Item, self).__unicode__()))但我建议将此逻辑放在指定的小部件中
https://stackoverflow.com/questions/8325414
复制相似问题