Django 1.8: когда элементы связаны двумя отдельными отношениями, как я могу указать, какое отношение использовать?

У меня есть User (модель django по умолчанию) и Interest.

Они связаны друг с другом через две модели многие ко многим через, поэтому отслеживайте дополнительные данные об отношениях.

Одна модель, Selected, отслеживает, с какими интересами хочет быть связан пользователь.

Другая модель, Recommended, перечисляет интересы, которые можно предложить пользователю.

Дайте объект User, как я могу добраться до любого из них? user.interest_set.all() возвращает проценты только через Selected. Как я могу указать, какую модель отношения/через использовать?


person StringsOnFire    schedule 31.07.2015    source источник


Ответы (1)


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`
person Daniel Roseman    schedule 31.07.2015
comment
Это выглядит правильно, но строка user_recommended дает мне эту ошибку: Файл C:\Python34\lib\site-packages\django\db\models\base.py, строка 1624, в _check_long_column_names для m2m в f.rel.through._meta .local_fields: AttributeError: объект 'str' не имеет атрибута '_meta' - person StringsOnFire; 31.07.2015
comment
Я думаю, это может быть связано с тем, что модель through находится в отдельном приложении, которое создает рекомендации, поэтому мне нужно ссылаться на нее по-другому в атрибуте through? - person StringsOnFire; 31.07.2015
comment
Я задал его в отдельном вопросе: stackoverflow.com/questions/31746235 - person StringsOnFire; 31.07.2015