2015-01-07 3 views
0

Я пытаюсь создать сайт django с некоторыми функциями социальных сетей. Пользователи должны иметь возможность подключаться друг к другу. Модели, которые я создал выглядеть следующим образом:пользовательские подключения в django

class Jumper(models.Model): 
    ... 
    @property 
    def connections(self): 
     jumpers = [] 
     for connection in self.connection_set.all(): 
      if connection.jumper_1.id == self.id: 
       jumpers += connection.jumper_2 
      else: 
       jumpers += connection.jumper_1 

     return jumpers 


class Connection(models.Model): 
    """ 
    A connection between two jumpers 
    """ 

    # the jumpers to connect 
    jumper_1 = models.ForeignKey(Jumper, related_name='connection_jumper_1') 
    jumper_2 = models.ForeignKey(Jumper, related_name='connection_jumper_2') 

    # confirmed, yes or no 
    confirmed = models.BooleanField(default=False) 

Это не работает, так как Jumper.connection_set не определено. Я попробовал распечатать поля:

>>> print([i for i in self.__dir__() if '_set' in i]) 
['jump_set', '_set_pk_val', 'equipment_set', '__setattr__'] 

но, похоже, нет связанных с подключением вещей. Я что-то упускаю, или есть лучший способ сделать это?

ответ

1

Вы переопределили обратные аксессоры, объявив related_name атрибуты: вместо этого вам нужно использовать их.

Однако, вы на самом деле хотите, чтобы ManyToManyField указывал на «я» - назовите его connections, тогда вы можете полностью отказаться от класса Connection и заменить существующее свойство только self.connections.all().

+0

Как я могу сохранить подтверждение каждой связи, как у меня в этой модели, с помощью «ManyToManyField»? –

Смежные вопросы