5 python django django-models django-admin
我试图建立多对一的关系,并希望能够通过管理面板控制它(添加-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)
Run Code Online (Sandbox Code Playgroud)
我希望我的模型允许一个省有几个办公室.
所以在我的admin.py里面:
class ProvinceCreator(admin.ModelAdmin):
list_filter = ['numberPlate']
list_display = ['name', 'numberPlate','office']
class OfficeCreator(admin.ModelAdmin):
list_display = ['name']
Run Code Online (Sandbox Code Playgroud)
这似乎对我来说是正确的,但是当我尝试使用管理面板添加新的省时,我得到了这个:
TemplateSyntaxError at /admin/haritaapp/province/
Caught an exception while rendering: no such column: haritaapp_province.office_id
Run Code Online (Sandbox Code Playgroud)
谢谢
它会让您的模型向后设置.如果您希望省有多个办公室,那么省应该是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)
Run Code Online (Sandbox Code Playgroud)
这将是实现一对多关系的直接且非常直观的方式
至于你得到的"没有这样的列:haritaapp_province.office_id"的错误,当你向模型中添加一个新属性(在你的案例办公室中)时,你应该手动将列添加到表中.或者删除表并重新运行syncdb:
python manage.py syncdb
Run Code Online (Sandbox Code Playgroud)
向模型添加新字段时,Django 不会自动向表中添加新列.