#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_users5. @Смит, вот так:
video.add_users.add(*video.user.profile.friends)