【问题标题】:How to tie a row in a particular model to a field in another in django如何将特定模型中的一行与 django 中的另一个字段联系起来
【发布时间】:2011-12-06 11:00:07
【问题描述】:

我对以下(简化版)模型有疑问:

Sponsor(models.Model):
     sponsor_name = models.CharField()

Concerts(models.Model):
     artist_name = models.CharField()
     sponsor = models.ManyToMany(Sponsor)

我进入管理界面并添加一个新的赞助商,它会自动显示在任何音乐会上,所有赞助商都会显示在所有音乐会上。这不是我想要的,我希望一些赞助商参加一些音乐会。

我意识到这是一个人际关系问题。 我试过了:

Sponsor(models.Model):
     belongs_to = models.ForeignKey(Concerts)
     sponsor_name = models.CharField()

Concerts(models.Model):
     artist_name = models.CharField()

但现在我不能重复使用赞助商,我必须为每个音乐会添加一个新赞助商。

【问题讨论】:

    标签: python django database-design many-to-many foreign-key-relationship


    【解决方案1】:

    我认为您在 django-admin 界面中的 Concert 模型中将可能的值误认为是实际选择的 Sponsor

    试试这个python manage.py shell 然后from yourapp.yourmodel import Concerts; Concerts.objects.sponsor_set.all()。 结果应该只包含为该模型选择的Sponsors(我打赌你会看到空列表)。

    【讨论】:

    • 哦,是的,我看到了所有值,我必须突出显示我想要的值,然后保存,我很傻。谢谢
    【解决方案2】:

    如果您希望每个音乐会有多个Sponsors,并且每个Sponsor 能够与多个Concerts 关联,那么您将需要使用ManyToManyField 而不是ForeignKey .

    请参阅https://docs.djangoproject.com/en/dev/ref/models/fields/#manytomanyfield 上的文档

    问题可能在于您如何显示您的赞助商——请确保当您在模板中打印音乐会时,您没有选择所有赞助商,而是遍历concert_instance.sponsor.all() 查询集。

    【讨论】:

      猜你喜欢
      • 2019-11-24
      • 2018-06-17
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 2021-12-09
      • 2022-10-16
      相关资源
      最近更新 更多