Django Admin中的一对一字段
已编辑为使用一对一字段
我想在Django的模型管理中添加一个建筑物的面积。表格结构是
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')
我知道可以通过以下方式访问面积属性
b=buildings.get(id=1)
print(b.area.area)
但是我不明白如何将b.area.area加入到模型管理中——因为这样做不行。
class AdminSection(admin.ModelAdmin):
def area(self, obj):
return obj.area.area
fields=(('id','area'))
2 个回答
-1
如下所示,如果"Building"类有一个"models.OneToOneField()"指向"Area"类,这意味着"Building"类有一个外键指向"Area"类:
# "models.py"
from django.db import models
class Area(models.Model):
name = models.CharField(max_length=100)
class Building(models.Model):
name = models.CharField(max_length=100)
area = models.OneToOneField( # Here
Area,
on_delete=models.CASCADE,
primary_key=True
)
那么,你可以把"Building"类放在"Area"类下面,如下所示:
# "admin.py"
from django.contrib import admin
from .models import Area, Building
class BuildingInline(admin.TabularInline):
model = Building
@admin.register(Area)
class AreaAdmin(admin.ModelAdmin):
inlines = (BuildingInline, )
如下所示,如果"Area"类有一个"models.OneToOneField()"指向"Building"类,这意味着"Area"类有一个外键指向"Building"类:
# "models.py"
from django.db import models
class Building(models.Model):
name = models.CharField(max_length=100)
class Area(models.Model):
name = models.CharField(max_length=100)
area = models.OneToOneField( # Here
Building,
on_delete=models.CASCADE,
primary_key=True
)
那么,你可以把"Area"类放在"Building"类下面,如下所示:
# "admin.py"
from django.contrib import admin
from .models import Area, Building
class AreaInline(admin.TabularInline):
model = Area
@admin.register(Building)
class BuildingAdmin(admin.ModelAdmin):
inlines = (AreaInline, )
5
如上所述,你想使用一种叫做内联模型管理的功能,像这样:
class AreaInline(admin.StackedInline):
model = Area
class BuildingAdmin(admin.ModelAdmin):
inlines = (AreaInline, )
admin.site.register(Building, BuildingAdmin)
另外,你的模型最好用单数名称,比如Building
,这样更符合语义——例如,一个建筑有一个面积。除非Buildings
对象确实是在管理每个实例的多个建筑。