покажите друзьям в ManyToManyField

#python #django #many-to-many

Вопрос:

Я создаю блог-приложение и пытаюсь получить доступ только к друзьям ManyToManyField . НО у меня это не работает.

То, что я пытаюсь сделать

Я пытаюсь показать только список друзей в ManyToManyField .

models.py

 class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE,default='',unique=True)
    full_name = models.CharField(max_length=100,default='')
    friends = models.ManyToManyField("Profile",blank=True)

class Video(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE,default='',null=True)
    add_users = models.ManyToManyField(Profile,related_name='taguser')
 

Я хочу получить доступ к друзьям в видеомодели ManyToManyField

Что я пробовал

  • Я тоже так делал ManyToManyField('friends )», но у меня это не сработало.

Я не знаю, что делать.

Любая помощь будет оказана.

Заранее спасибо

Ответ №1:

Если вы не определили related_name в своей Profile модели OneToOneField User , Django будет использовать имя модели в нижнем регистре для доступа к связанному объекту. Так, user.profile .

Или также вы можете получить связанные friends объекты Video.user с помощью _set :

 video = Video.objects.get(pk=pk)
video.user.profile.friends
# or 
video.user.profile_set
 

Обратите внимание, что вы можете удалить unique опцию (Django Docs) из OneToOneField :

Этот параметр действителен для всех типов полей, кроме ManyToManyField и OneToOneField.


И добавить друзей в add_users:

 video.add_users.add(*video.user.profile.friends)
 

Обратите внимание, что add() , create() , remove() , clear() , и set() все
изменения базы данных применяются немедленно для всех типов связанных полей.
Другими словами, нет необходимости вызывать функцию save() на обоих концах
отношений.

Комментарии:

1. Но как я могу вставить его в model field (ManyToManyField) (add_users)?

2. Я пытаюсь получить доступ к друзьям пользователей в add_users ManyToManyField, а НЕ в friends

3. Вы хотите добавить friends в add_users ?

4. Да, сэр. Я хочу получить доступ user friends в add_users

5. @Смит, вот так: video.add_users.add(*video.user.profile.friends)