【问题标题】:How to manage many to one relationship in Django如何在 Django 中管理多对一关系
【发布时间】:2009-07-28 18:34:21
【问题描述】:

我正在尝试建立多对一的关系,并希望能够通过管理面板控制它(添加 - 删除等)。所以这是我的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

谢谢

【问题讨论】:

    标签: python django django-models django-admin


    【解决方案1】:

    您的模型设置向后接缝。如果你想让省有很多办公室,那么省应该是办公室模型中的外键。

    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 db 并重新生成它:) 一个小问题,外国项目显示为 Province_object在选择/添加时。如何修复它以便显示名称?问候
    • 哦,自我编辑:def __unicode__(self): return self.name 为我完成了这项工作:p
    • 参考“Django 不会自动添加新列” - Django-south 在自动管理模型更改方面做得很好,尽管我希望迁移命名方案对多开发人员更友好。跨度>
    【解决方案2】:

    你看过做内联的文档吗?

    在你的 admin.py 中

    class Office(admin.TabularInline):
        model = Office
    
    class ProvinceAdmin(admin.ModelAdmin):
        inlines = [
            Office,
        ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 2010-10-14
      • 2011-12-16
      • 2021-01-28
      • 1970-01-01
      相关资源
      最近更新 更多