一对一字段Django Admin

时间:2014-03-05 21:07:46

标签: python django

编辑使用一对一字段

我想将建筑物的区域添加到django modeladmin。表结构是

class Buildings(models.Model):
    id = models.AutoField(primary_key=True)
    auto_sf = models.OneToOneField(Area, db_column='id')

class Area(models.Model):
    id= models.IntegerField('Buildings', db_column='id')
    area=models.FloatField(blank=True, null=True) 

我知道我可以使用

访问area属性
b=buildings.get(id=1)
print(b.area.area)

但我不明白如何将b.area.area纳入modeladmin - 因为这不起作用。

class AdminSection(admin.ModelAdmin):

    def area(self, obj):
           return obj.area.area

    fields=(('id','area'))

1 个答案:

答案 0 :(得分:2)

如上所述,您希望使用inline model admin,如下所示:

class AreaInline(admin.StackedInline):
    model = Area
class BuildingAdmin(admin.ModelAdmin):
    inlines = (AreaInline, )
admin.site.register(Building, BuildingAdmin)

此外,理想情况下,您的模型应具有单数名称,即Building,以使其更具语义感 - 例如建筑物有一个区域。除非Buildings对象实际上是每个实例管理多个建筑物。