Django:两个ManyToManyField到同一个模型

时间:2013-08-25 03:38:26

标签: 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 = models.ManyToManyField(settings.AUTH_USER_MODEL,
                                             blank=True, null=True)

这个模型有一个ForeignKey和一个ManyToManyField来设置.AUTH_USER_MODEL,现在如果我有一个名为'user'的settings.AUTH_USER_MODEL实例,我怎么能得到这个用户写的问题和这个用户喜欢的问题?我试过'user.question_set.all()',但它不起作用,也许我应该设置related_name,如下所示:

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.favourite_questions.all()来获取用户提出的问题和优惠。但我不确定这是不是真的。所以我想知道是否有任何好方法可以解决这个问题。

2 个答案:

答案 0 :(得分:1)

  

我尝试了'user.question_set.all()',但它不起作用

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

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)

答案 1 :(得分:0)

要获取特定用户提出的所有问题,请使用Question.objects.filter(author=user)。同样,要使某个用户收到所有问题,请使用Question.objects.filter(favourite_users=user)

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