2015-07-31 5 views
3

У меня есть User (модель по умолчанию django) и Interest.Django 1.8: Когда элементы связаны через два отдельных отношения, как я могу указать, какое отношение использовать?

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

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

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

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

ответ

2

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` 
+0

Это выглядит правильно, но 'user_recommended' линия дает мне эту ошибку: Файл "C: \ Python34 \ Lib \ сайт-пакеты \ Джанго \ дб \ модели \ base.py", строка 1624, в _check_long_column_names для m2m в f.rel.through._meta.local_fields: AttributeError: объект 'str' не имеет атрибута '_meta' – StringsOnFire

+0

Я думаю, это может быть потому, что модель 'through' находится в отдельном приложении, которое создает рекомендации, поэтому Мне нужно ссылаться по-другому в атрибуте 'through'? – StringsOnFire

+0

Я задал его в отдельном вопросе: http://stackoverflow.com/questions/31746235/ – StringsOnFire