Создание поля модели django, которое является внешним ключом, указывающим на поле модели в другом приложении, принимающем массив пользователей в определенной группе
Я новичок в django rest framework, то, чего я пытаюсь достичь, это создать поле модели, которое является внешним ключом и указывает на другую модель приложения и взять их user_id (автоматический id, который предопределен)
users\models.py
class user(models.Model):
username = models.CharField(max_length=10, unique=True)
name = models.CharField(max_length=64)
creationtime = models.DateTimeField(auto_now_add=True)
userdescription = models.CharField(max_length=250)
def __str__(self) -> str:
return self.username
teams\models.y
class team(models.Model):
teamname = models.CharField(max_length=64)
description = models.CharField(max_length=128)
creationtime = models.DateTimeField(auto_now_add=True)
admin = models.ForeignKey(user, related_name='admin', on_delete=models.CASCADE)
members = models.ForeignKey(user, related_name='members', on_delete=models.CASCADE)
def __str__(self) -> str:
return self.teamname
Итак, я хочу, чтобы когда я вижу колонку members в базе данных, она показывала массив user_id, что-то вроде этого:
members: [1,2,5,7,8]
это число относится к автоматическому индексу, который создается для каждой строки или, например, когда мы делаем запрос get для определенного user_id, например: https://localhost:8000/users/1/
Заранее спасибо за помощь.
Вы должны делать это наоборот.
У каждого пользователя должно быть поле team (внешний ключ) с related_name = "members".
Затем, если вы хотите получить всех членов команды, вы можете использовать связанное имя.
(В Django есть только manyToOne, а не OneToMany)
users\models.py
class user(models.Model):
. . .
team = models.ForeignKey(user, related_name='members', on_delete=models.CASCADE)
teams\models.y
class team(models.Model):
teamname = models.CharField(max_length=64)
description = models.CharField(max_length=128)
creationtime = models.DateTimeField(auto_now_add=True)
admin = models.ForeignKey(user, related_name='admin', on_delete=models.CASCADE)
def __str__(self) -> str:
return self.teamname
Вы можете использовать отношения "многие ко многим", так как это создаст промежуточную таблицу, относящуюся к пользователю и команде
members = models.ManyToManyField(user,help_text='Select members for this team')