【问题标题】:Django query with many to many and through table带有多对多和通过表的 Django 查询
【发布时间】:2016-01-14 08:56:59
【问题描述】:

假设我有这些 Django ORM 类:

class Event(models.Model):
    creator = models.ForeignKey(User, related_name="created_events")
    participants = models.ManyToManyField(
        User, related_name="joined_events", through='EventsParticipants')


class EventsParticipants(models.Model):
    user = models.ForeignKey(User)
    event = models.ForeignKey(Event)
    date_invited = models.DateTimeField(
        auto_now_add=True, blank=False, null=False)

    class Meta:
        unique_together = (('user', 'event'),)

class User(models.Model):
    name = models.CharField(....)

我的问题是: 我想在一个查询集中获取我创建的所有事件以及我使用 Event 类参与的所有事件。

【问题讨论】:

  • 你应该花点时间用实际的代码写出正确的问题,而不是编辑它,让人们浪费时间。

标签: python django django-models django-orm


【解决方案1】:

【讨论】:

  • 如果有两个或多个 EventsParticipants 行具有相同的 event_id 和不同的 user_id,这会给我一个重复的结果
  • 还请注意,EventsParticipants 中的用户和事件是唯一的,我已更新问题以反映这一点
  • 你试过了吗?在我看来,如果您定义了unique_together,那么您将获得的唯一重复结果是您既是同一事件的创建者又是参与者的事件......如果您希望这种情况发生,您可能会更好在两个查询集中进行,一个作为创建者,一个作为 Event.objects.exclude(creator=me).filter(participants=me)
  • 是的,我已经用一个新的 Django 项目再次尝试过,当我在 EventsParticipants 中添加 5 行具有相同 event_id 和 5 个不同用户的行时,它将返回相同的 Event 对象 5 次。跨度>
  • 哦,我认为最后需要致电.distinct(),请参阅更新后的答案
猜你喜欢
  • 2013-02-05
  • 2011-10-09
  • 2014-05-27
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多