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 the User model [Django-doc] directly. For more information you can see the referencing the User model section of the documentation.

Вернуться на верх