gpt4 book ai didi

python - Django - 使用 ManyToManyField 进行反向查找

转载 作者:太空狗 更新时间:2023-10-29 22:27:57 32 4
gpt4 key购买 nike

我正在尝试遵循 django 文档中的代码:

class Person(models.Model):
name = models.CharField(max_length=128)

def __unicode__(self):
return self.name

class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')

def __unicode__(self):
return self.name

class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)


>>> ringo = Person.objects.create(name="Ringo Starr")
>>> paul = Person.objects.create(name="Paul McCartney")
>>> beatles = Group.objects.create(name="The Beatles")
>>> m1 = Membership(person=ringo, group=beatles,
... date_joined=date(1962, 8, 16),
... invite_reason= "Needed a new drummer.")
>>> m1.save()
>>> beatles.members.all()
[<Person: Ringo Starr>]
>>> ringo.group_set.all()

我的模型是这样的:

class Trip(models.Model):
members = models.ManyToManyField(User,blank=True,null=True,through='TripReservation')

但是当我为给定的用户实例调用 user.group_set.all() 时,我得到一个错误,指出没有属性 group_set

最佳答案

首先,您使用的是直通模型吗?你在那里通过了,但你没有列出它。如果不是,则不需要它。

我会添加一个 related_name,像这样:

class Trip(models.Model):
members = models.ManyToManyField(User,blank=True,null=True, related_name='user_trips')

那么你应该可以调用:

user.user_trips.all()

我将其命名为“user_trips”而不是“trips”,因为如果它不是唯一名称,则可能会导致冲突。

如果您使用的是直通模型,它看起来更像这样:

#User is defined in django.auth

class Trip(models.Model):
members = models.ManyToManyField(User,blank=True,null=True, related_name='user_trips', through='TripReservation')

class TripReservation(models.Model):
user = models.ForeignKey(User)
trip = models.ForeignKey(Trip)
registered = models.DateField()

通过这种方式理解,TripReservation 指的是特定用户对行程的预订,而不是整个行程,有关行程的信息应该是行程模型本身的属性。因此,TripReservation.registered 是特定用户注册旅行的时间。

用户行程查找将是相同的:

user.user_trips.all()

关于python - Django - 使用 ManyToManyField 进行反向查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4881783/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com