代码之家  ›  专栏  ›  技术社区  ›  akephalos

django admin带mptt子级的嵌套内联线

  •  0
  • akephalos  · 技术社区  · 6 年前

    我想知道是否有可能创建一个具有多个嵌套内联线的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'
    

    我的管理员。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, ]
    

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Peter Sobhi    6 年前

    仅使用 MPTTModelAdmin 它会自动完成:

    from mptt.admin import MPTTModelAdmin
    
    admin.site.register(Mainproduct, MPTTModelAdmin)