Python 如何在Django中管理多对一关系
我试图建立一个多对一的关系,并希望能够控制它(添加-删除等)通过管理面板。这是我的model.py:Python 如何在Django中管理多对一关系,python,django,django-models,django-admin,Python,Django,Django Models,Django Admin,我试图建立一个多对一的关系,并希望能够控制它(添加-删除等)通过管理面板。这是我的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 =
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
谢谢你看过做内联的文档了吗 在你的admin.py中
class Office(admin.TabularInline):
model = Office
class ProvinceAdmin(admin.ModelAdmin):
inlines = [
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在向模型添加新字段时不会自动向表中添加新列。最后,我可以让它正常工作,即使“python manage.py syncdb”也不够,所以我不得不删除sqlite3数据库并重新生成:)一个小问题tho,在选择/添加时,外来项显示为Province_对象。如何修复它以使其显示名称?Regardsoh self-edit:def _unicode _;(self):return self.name为我做了这项工作:pin ref到“Django不会自动添加新列”-Django south在自动管理模型更改方面做得很好,尽管我希望迁移命名方案对多个开发人员更友好。