一对一字段 Django 管理员

use*_*147 5 python django one-to-one django-admin python-3.x

编辑为使用一对一字段

我想将建筑物的面积添加到 django modeladmin 中。表结构是

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

class Buildings(models.Model):
    id = models.AutoField(primary_key=True)
    auto_sf = models.OneToOneField(Area, db_column='id')
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过使用访问区域属性

b=buildings.get(id=1)
print(b.area.area)
Run Code Online (Sandbox Code Playgroud)

但我不明白如何将 b.area.area 合并到 modeladmin 中 - 因为这不起作用。

class AdminSection(admin.ModelAdmin):
        
    def area(self, obj):
           return obj.area.area

    fields=(('id','area'))
Run Code Online (Sandbox Code Playgroud)

小智 5

如上所述,您希望使用内联模型 admin,如下所示:

class AreaInline(admin.StackedInline):
    model = Area
class BuildingAdmin(admin.ModelAdmin):
    inlines = (AreaInline, )
admin.site.register(Building, BuildingAdmin)
Run Code Online (Sandbox Code Playgroud)

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

  • 当我尝试此操作时,出现错误:“‘区域’没有‘建筑物’的外键” (20认同)
  • 外键必须位于“区域”而不是“建筑物”中。 (2认同)