Django:同一型号的两个ManyToManyField

Django:同一型号的两个ManyToManyField,django,Django,这是我的代码: class Question(models.Model): title = models.CharField(max_length=255, verbose_name='title', unique=True) content = models.TextField(verbose_name='content') author = models.ForeignKey(settings.AUTH_USER_MODEL) favourite_users

这是我的代码:

class Question(models.Model):
    title = models.CharField(max_length=255, verbose_name='title', unique=True)
    content = models.TextField(verbose_name='content')
    author = models.ForeignKey(settings.AUTH_USER_MODEL)
    favourite_users = models.ManyToManyField(settings.AUTH_USER_MODEL,
                                             blank=True, null=True)
这个模型有一个ForeignKey和一个指向settings.AUTH\u USER\u model的ManyToManyField,现在如果我有一个名为“USER”的settings.AUTH\u USER\u model实例,我如何获得这个用户写的问题和这个用户喜欢的问题?我尝试过“user.question_set.all()”,但它不起作用,也许我应该设置相关的_名称,如下所示:

author = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='questions')
favourite_users = models.ManyToManyField(settings.AUTH_USER_MODEL,
                                         related_name='favourite_questions',
                                         blank=True, null=True)

然后使用:user.questions.all()和user.favorite_questions.all()获取用户提出的问题和喜欢的问题。但我不确定这是不是真的。所以我想知道是否有什么好方法可以解决这个问题。

要获得某个用户提出的所有问题,请使用
Question.objects.filter(author=user)
。类似地,要获得某个用户喜欢的所有问题,请使用
Question.objects.filter(favorite\u users=user)

包含一些非常有用的跨多对多关系查找示例

我试过
“user.question\u set.all()”
,但不起作用

当您使用自定义身份验证模型时,应使用来获取身份验证框架正在使用的模型:

from django.contrib.auth import get_user_model

user_model = get_user_model()
要获取特定用户的问题,请执行以下操作:

user_model = get_user_model()
user = user_model.objects.get(pk=1)  # Now this is not the "normal" User

user_questions = Question.objects.filter(author=user)
user_favorites = Question.objects.filter(favorite_users=user)

感谢您的回复,user不是user,user是settings的实例。AUTH_user_MODEL,问题模型有一个ForeignKey和一个指向settings.AUTH_user_MODEL的manyField,因此如果我使用user.Question_set.all(),django不知道查询集应该包含哪个字段(字段作者或喜爱的用户)。我想知道设置“related_name”是否是解决此问题的好方法,从
question_set
django中的name
question
可以知道您要查找的字段。用于自定义“反向”关系的管理器。您不应该在查询中使用
User
(来自
django.contrib.auth.models
),而是在查询中使用
get\u User\u model()
方法,因为您使用的是自定义的auth模型。您误解了我的意思,如果问题只有一个指向settings.auth\u User\u model的manyfield,那么您就使用'Question\u set',ok,django知道QuerySet应该包含哪个字段,但如果Question与settings.AUTH_MODEL_字段有两个ManyToManyField(在这种情况下ForeignKey是相同的),则使用“Question_set”,django如何确定查询集应该包含哪个字段?
question\u set
只适用于那些与
question
具有反向关系的模型,它不适用于
question
对象的实例。我应该提高我的英语水平,我已经找到了解决方案,只需设置相关的\u名称,无论如何,谢谢