我正在尝试建立多对一关系,并希望能够通过管理面板控制它(添加-remove等)。所以这是我的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
由于
答案 0 :(得分:6)
您接着将模型设置为向后。如果您希望省有多个办事处,那么省应该是Office模型中的外键。
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”的错误,当您向模型添加新属性(在您的案例办公室中)时,您应该手动将列添加到表中。或者删除表并重新运行syncdb:
python manage.py syncdb
当您向模型添加新字段时,Django将不自动向表中添加新列。
答案 1 :(得分:1)
您是否查看过使用Inlines的文档?
在您的admin.py
中class Office(admin.TabularInline):
model = Office
class ProvinceAdmin(admin.ModelAdmin):
inlines = [
Office,
]