在Django Admin

时间:2018-08-14 14:11:22

标签: django django-models django-forms foreign-keys

我正在尝试创建属性列表并将其链接到对象。

表:属性

class Properties(models.Model):
    Property = models.CharField(primary_key=True, max_length=4......
    PropetyDesc = models.CharField(max_length= .......

表:木头

class Wood(models.Model):
    Name = models.CharField(max_length= .....
    Property = models.ForeignKey(Properties, on_delete=models......

首先,我尝试使用Django Admin的功能来查看数据库设计如何堆叠。

简而言之,我的管理页面看起来像一个用于创建采购订单的GUI,其中标题部分将包含订单详细信息,而在项目行中,我们将包含以下材料:

enter image description here

在当前情况下,我试图将对象(Wood)放在标题上,并且在正在创建的“ TabularInline”中将具有选择属性的选项。

class PropertiesInline(admin.TabularInline):
    model = Properties

    def get_extra(self, request, obj=None, **kwargs):
        extra = 1
        return extra

class WoodAdmin(admin.ModelAdmin):
    list_display = ('Name', 'Property')
    fields = ['Name', 'Property'] 
    inlines = [PropertiesInline] 

admin.site.register(Wood, WoodAdmin)

但是,我最终遇到以下错误:

ERRORS:
<class 'mapp.admin.PropertiesInline'>: (admin.E202) 'mapp.Properties' has no ForeignKey to 'mapp.Wood'.

另一方面,如果我要扭转这种情况:

class WoodInline(admin.TabularInline):
    model = Wood

    def get_extra(self, request, obj=None, **kwargs):
        extra = 1
        return extra

class PropertiesAdmin(admin.ModelAdmin):
    list_display = ('Property', 'PropetryDesc')
    fields = ['Property', 'PropertyDesc'] 
    inlines = [WoodInline] 

admin.site.register(Properties, PropertiesAdmin)

页面已加载,但最终我在标题中获得了“属性”,并带有用于选择“木材”的各种记录的选项。

有没有一种方法可以实现我想要的目标。

1 个答案:

答案 0 :(得分:0)

通过创建与两个表都具有FK关系的中间表解决了这一难题。创建具有属性的表格内联,并注册具有指定为内嵌对象的属性的木材。这样,我现在可以将许多属性附加到对象(木材)上。

enter image description here