0

这是我的代码:

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到settings.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() 来获取用户提出和收藏的问题。但我不确定这是否属实。所以我想知道是否有什么好的方法可以解决这个问题。

4

2 回答 2

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)
于 2013-08-25T04:32:43.823 回答
0

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

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

于 2013-08-25T03:59:30.990 回答