Django: присвоение нескольких значений полю модели
Я пытаюсь сделать функцию 'friendlist' в моделях django и у меня возникли некоторые проблемы. В моем приложении каждый пользователь может сделать карточку с именем. Я хочу позволить пользователям добавлять друг друга в "друзья" (как в fb), чтобы я мог создать для них список друзей.
Вот как выглядит мой models.py на данный момент.
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Card(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name="cards")
# friend_list = models.????
Я хочу добавить атрибут 'friend_list', который может хранить информацию о других картах (я имею в виду их значения pk). Позже я хотел бы итерировать эти значения, чтобы использовать их для создания списка друзей в шаблоне.
Например, "карточка с именем Джорджа" должна иметь информацию о значении pk карточек его друзей.
Есть ли способ сохранить несколько значений в одном атрибуте?
Вы можете использовать ManyToManyField [Django-doc] для работы с коллекцией User, относящихся к одному Card и множеством Card, относящихся к одному User. Таким образом, вы можете переписать это так:
from django.conf import settings
from django.db import models
class Card(models.Model):
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='owned_cards'
)
friends = models.ManyToManyField(
settings.AUTH_USER_MODEL,
related_name='befriended_cards'
)
# …
Note: It is normally better to make use of the
settings.AUTH_USER_MODEL[Django-doc] to refer to the user model, than to use theUsermodel [Django-doc] directly. For more information you can see the referencing theUsermodel section of the documentation.