如何使用related_name查询M2M

时间:2017-07-09 23:31:46

标签: python django many-to-many

我有两个非常相似的模型与M2M字段,不知何故我试图查询其中一个完美的工作,但当我尝试相同的代码与另一个,它给了我错误。我能找到的唯一区别是related_name

我找到了一个解决方法,但我仍然很好奇如果下次遇到同样的问题我怎么能让它工作。

(我只写了我拥有的M2M字段,每个模型只有一个M2M字段,即使想到它,如果有多个M2M可以做什么,但这不是这个问题)

这是我的工作模式

class Team(View):
    members = models.ManyToManyField(User, blank=True)

这是包含上述模型的视图,(跳过classdef post等等)

user = User.objects.filter(id=111).first()
all_members = user.Team_set.filter()  # this would return all

下面是给我提问的模型

class Room(View):
    participants = models.ManyToManyField(User, blank=True, related_name='participants')

这是具有上述模型的视图

user = User.objects.filter(id=111).first()
all_p = user.room_set.filter()  # this then gives me error of 'User' object has no attribute 'room_set'

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:1)

定义related_name时,您需要像这样使用它:

Model.related_name.* 

别名related_model_set被破坏。

说到你的代码应该是这样的:

user = User.objects.filter(id=111).first()
all_p = user.participants.filter()  # this then gives me error of 'User' object has no attribute 'room_set'