如何在Django中管理多对一关系
我正在尝试建立一个多对一的关系,并希望能够通过管理面板来控制这个关系(比如添加、删除等)。所以这是我的 model.py 文件:
from django.db import models
class Office(models.Model):
name = models.CharField(max_length=30)
class Province(models.Model):
numberPlate = models.IntegerField(primary_key=True)
name = models.CharField(max_length=20)
office = models.ForeignKey(Office)
我希望我的模型能够让一个省份拥有多个办公室。
所以在我的 admin.py 文件中:
class ProvinceCreator(admin.ModelAdmin):
list_filter = ['numberPlate']
list_display = ['name', 'numberPlate','office']
class OfficeCreator(admin.ModelAdmin):
list_display = ['name']
我觉得这样写是对的,但是当我尝试通过管理面板添加一个新省份时,我遇到了这个问题:
TemplateSyntaxError at /admin/haritaapp/province/
Caught an exception while rendering: no such column: haritaapp_province.office_id
谢谢
2 个回答
1
你有没有查看过关于使用内联的文档呢?
在你的 admin.py 文件里
class Office(admin.TabularInline):
model = Office
class ProvinceAdmin(admin.ModelAdmin):
inlines = [
Office,
]
6
看起来你的模型设置有点问题。如果你想让一个省有很多办公室,那么在办公室模型里应该把省作为外键。
from django.db import models
class Province(models.Model):
numberPlate = models.IntegerField(primary_key=True)
name = models.CharField(max_length=20)
class Office(models.Model):
name = models.CharField(max_length=30)
province = models.ForeignKey(Province)
这样做是实现一对多关系的简单而直观的方法。
至于你遇到的错误“没有这个列:haritaapp_province.office_id”,当你在模型里添加一个新属性(在你的例子里是办公室)时,你需要手动把这个列添加到表里。或者你可以删除这个表,然后重新运行同步数据库的命令:
python manage.py syncdb
Django 不会在你给模型添加新字段时自动把新列加到表里。