django admin 嵌套内联与 mptt children

django admin nested inlines with mptt children

我正在尝试弄清楚是否可以创建具有多个嵌套内联的 ModelAdmin,例如:

  1. 合同
    • 主要产品
      • 子产品1
      • 子产品2
        • 子子产品

我也在尝试用 mptt 求解模型。 我的模型看起来像这样:

class Contract(models.Model):    
    contractnumber =  models.CharField(max_length=25)
    field2 =  models.CharField(max_length=25)
    field3 =  models.CharField(max_length=25)
    field4 =  models.CharField(max_length=25)

    def __str__(self):
        return self.field1

    class Meta:
        verbose_name = 'Contract'
        verbose_name_plural = 'Contracts'

class Mainproduct(MPTTModel):
    pr_c_contractnumber = models.ForeignKey(Contract)
    pr_name = models.Charfield(max_length=50)
    productdetails = models.Textfield(max_length=5000)
    pr_sernr = models.CharField(max_length=50)
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True,
                            on_delete=models.SET_NULL)

    def __str__(self):
        return self.pr_c_contractnumber, self.pr_name

    class MPTTMeta:
        order_insertation_by = ['pr_sernr']

    class Meta:
        verbose_name = 'Product'
        verbose_name_plural = 'Products'

我的 admin.py 文件如下所示:

class ProductModelInlineForm(forms.ModelForm):
    parent = TreeNodeChoiceField(queryset=Product.objects.all())

class ProductModelInline(admin.TabularInline):
    model = Product
    form = ProductModelInlineForm
    extra = 1

class ProductAdmin(admin.ModelAdmin):
    inlines = [ProductModelInline, ]

class ProductInline(admin.TabularInline):
    model = Product
    extra = 1

class ContractAdmin(admin.ModelAdmin):
    inlines = [ProductInline, ]

有没有办法创建这些嵌套内联?我错过了什么重要的东西吗?

只需使用MPTTModelAdmin,它会自动完成:

from mptt.admin import MPTTModelAdmin

admin.site.register(Mainproduct, MPTTModelAdmin)