這是我的代碼:Django的:兩個ManyToManyField到相同型號
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,現在如果我有一個名爲「用戶」一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()和用戶。 favourite_questions.all()獲得用戶提出的問題。但我不確定它是否屬實。所以我想知道是否有任何好的方法來解決這個問題。
感謝您的回覆,用戶不是用戶,用戶是settings.AUTH_USER_MODEL的一個實例,Question模型具有ForeignKey和ManyToManyField來設置.AUTH_USER_MODEL,所以如果我使用user.question_set.all(),則django doesn' t知道QuerySet應該包含哪個字段(field author或favourite_users)。我想知道如果設置'related_name'是解決此問題的好方法 – YuYang
從'question_set'中的'question'名稱,django知道您正在查找哪個字段。使用[related_name](https://docs.djangoproject.com/en/1.5/topics/db/queries/#backwards-related-objects)爲「反向」關係自定義管理器。您不應該使用'User'(來自'django.contrib.auth。models'),而應該在查詢中使用'get_user_model()'方法,因爲您使用的是自定義auth模型。 –
您誤解我了,如果問題只有一個ManyToManyField設置爲settings.AUTH_USER_MODEL,那麼您使用'question_set',好吧,django知道QuerySet應該包含哪個字段,但是如果Question有兩個ManyToManyField(ForeignKey在這種情況下是相同的) .AUTH_MODEL_FIELD,然後使用'question_set',django如何確定QuerySet應包含哪個字段? – YuYang