gpt4 book ai didi

python - Django 过滤 : model instance vs model pk

转载 作者:行者123 更新时间:2023-12-01 13:11:03 26 4
gpt4 key购买 nike

我偶然发现了(至少对我而言)Django 中一些相当奇怪的行为。我不确定这是否受支持/允许的行为。

假设我有以下模型:

class Club
name = CharField(....)
memberships = models.ManyToManyField(Person, through=ClubMembership, related_name='clubs')

def getMembership(self, personID):
return ClubMembership.objects.get(club_id=self.id, person_id=personID)

显然, getMembership返回关联的 ClubMembership实例(现在,让我们假设我们只为实际上在俱乐部中的人调用这个方法)。

现在,在调用此方法时,我发现:

club = Club.objects.get(...)
person = Person.objects.get(...)

membership = club.getMembership(person)



club = Club.objects.get(...)
person = Person.objects.get(...)

membership = club.getMembership(person.id)

都产生正确的成员资格。 filter里面有什么魔法吗?/ get检查 passend 关键字(对于 person_id )实际上是整数(pk)还是模型实例的方法?

如果两者都有效且被允许,有什么影响?任何差异表现明智?哪种方法是首选方法?

Ofc 我可以过滤整个人物模型,而不仅仅是 id,如下所示:

def getMembership(self, person):
return ClubMembership.objects.get(club_id=self.id, person=person)

但是afaik,这会慢很多,对吧?

最佳答案

Queries over related objects 中所述文档部分 整数 (pk) 或模型实例之间没有区别。

在他们的示例中,如果您有一个 id=5 的 Blog 对象 b,则以下三个查询将是相同的:

Entry.objects.filter(blog=b) # Query using object instance
Entry.objects.filter(blog=b.id) # Query using id from instance
Entry.objects.filter(blog=5) # Query using id directly

关于python - Django 过滤 : model instance vs model pk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59885914/

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