在我们的项目中,我一直在使用最新版本的django-nested-inlines v0.3.7和django 1.7
我在django admin中有以下定义来显示内联
class SpecsGroupedContentInline(NestedStackedInline):
model = SpecificationGroupedContent
extra = 1
fk_name = "specification"
fields = ["field_unit"]
class SpecsContentInline(NestedStackedInline):
model = SpecificationListContent
extra = 1
fk_name = "specification"
fields = ["content"]
class SpecsInline(NestedStackedInline):
model = Specification
inlines = [SpecsContentInline, SpecsGroupedContentInline]
extra = 1
fk_name = "product"
class ProductAdmin(NestedModelAdmin):
inlines = [
SpecsInline
]
list_display = ('name', 'sku')
form = ProductAdminForm
页面加载时,页面如下所示
有点难以看到,但规格部分有标题,列出内容的内联和分组内容的内联。之后,有一个空的Specs部分,其中包含空标题,空列出的内容和空的分组内容。
当我按下"添加另一个规格"在规范内部的按钮内联添加一个新行,新条目的结果如下所示
正如您所看到的,分组内容字段" Field Unit"不见了。我不确定我的设置是否不正确,但我发现这个堆栈溢出条目与我的设置类似
Django nested inlines not working?
虽然是一个不同的错误,但我们有类似的内联设置,所以我认为这个设置适用于django-nested-inlines。
另外,如果嵌套的内联模型是另一个模型的外键,我确定它是否相关但是django嵌套内联会受到影响吗? SpecificationsGroupedContent模型是另一个模型的外键,与SpecificationsListContent不同。我做了一个快速测试,其中SpecsInline内联仅包含SpecsGroupedContentInline或仅包含SpecsContentInline。仅使用SpecsContentInline时它工作得很好,但使用SpecsGroupedContentInline时会发生错误。
供参考,以下是我用于SpecsGroupedContent的相关模型的模型
class Product(AuthorStampedModel):
name = models.CharField(max_length=100)
sku = models.CharField(unique=True, max_length=100, verbose_name='SKU')
summary = models.TextField(blank=True, default="")
def __unicode__(self):
return self.return_product_details()
def return_product_details(self):
return '%s: %s' % (self.sku, self.name)
class Specification(models.Model):
product = models.ForeignKey('Product', related_name='specs')
title = models.CharField(max_length=100)
def __unicode__(self):
return self.return_spec_string()
def return_spec_string(self):
return '%s: %s' % (self.product.return_product_details(), self.title)
class SpecificationListContent(models.Model):
specification = models.ForeignKey('Specification', related_name='list_content')
content = models.CharField(max_length=255)
class Meta:
verbose_name_plural = 'Specification Listed Contents'
def __unicode__(self):
return self.specification.return_spec_string()
class SpecificationGroupedContent(models.Model):
specification = models.ForeignKey('Specification', related_name='group_content')
field_unit = models.CharField(max_length=255)
class Meta:
verbose_name_plural = 'Specification Grouped Contents'
def __unicode__(self):
return self.specification.return_spec_string()
class SpecificationGroupedContentValue(models.Model):
specification_grouped_content = models.ForeignKey(
'SpecificationGroupedContent',
related_name='group_content_value'
)
value = models.CharField(max_length=255)
class Meta:
verbose_name_plural = 'Specification Grouped Content Values'
def __unicode__(self):
return self.specification_grouped_content.specification.return_spec_string()
由于