Django 1.8:当项目通过两个单独的关系关联时,如何指定要使用的关系?

Django 1.8: When items are related via two separate relationships, how can I specify which relationship to use?

我有 User(django 的默认模型)和 Interest

它们通过两个 多对多 模型相互关联,因此请跟踪有关关系的其他数据。

一个模型,Selected,跟踪用户希望与之关联的兴趣。

另一个模型 Recommended 列出了要向用户建议的兴趣。

给一个User对象,我怎样才能得到其中一个? user.interest_set.all() returns 兴趣仅来自 Selected。如何指定要使用的 relation/through 模型?

Django 甚至不允许您定义相同模型之间的两个关系,除非您定义 related_name。所以你使用那个属性。

class Interest(models.Model):
    user_selected = models.ManyToManyField(
         User, through="Selected", related_name="selected_interests")
    user_recommended = models.ManyToManyField(
         User, through="Recommended", related_name="recommended_interests")


my_user.selected_interests.all()  # Interests where the user is in `user_selected`
my_user.recommended_interests.all()  # Interests where the user is in `user_recommended`