Отношения с Django и инфраструктурой отдыха добавляют поля замены.
-
26-12-2019 - |
Вопрос
Мой пользовательский объект с инфраструктурой отдыха имеет avatar_id
и cover_id
.Но вместо того, чтобы отображать это в API, я хочу, чтобы это был фактический URL-адрес аватара и URL-адрес обложки.
Мой User
модель:
avatar_id = models.IntegerField()
cover_id = models.IntegerField()
Мой UserAvatar
модель:
id = models.IntegerField(primary_key=True)
user_id = models.IntegerField()
file_id = models.IntegerField()
Мой Files
модель:
id = models.IntegerField(primary_key=True)
filename = models.CharField(max_length=255)
Та же концепция с UserCover
.
Как мне удалить avatar_id
по результатам /users/
и добавить поле аватара с фактическим именем файла аватара?
Решение
Я не уверен, что правильно понимаю ваш вопрос, но вот в чем я думаю проблемы.Читая ваш вопрос, я предположил, что вы новичок, поэтому и ответил так.Извините, если это не так.
- Вам не нужно добавлять поля идентификатора, Django делает это автоматически, поскольку всем таблицам нужен первичный ключ.Вы определяете ПК только тогда, когда вам нужно назвать его иначе, чем «id».
- Вам действительно стоит прочитать Учебник по Джанго который объясняет, как определять модели.User.cover_id и UserAvatar.file_id должны быть определены как ForeignKey.Если вы не знаете, что такое внешний ключ, прекратите экспериментировать с Django и заранее прочитайте руководство по работе с базами данных.
- Уже есть модель и набор классов для управляйте своими пользователями в Джанго.Вам следует их использовать.Например, «профиль пользователя» — это правильный способ расширить модель пользователя.
- Если вы заставите пользователей выбирать один аватар из набора предопределенных аватаров, тогда все в порядке.Если пользователи могут выбрать любой аватар (загрузить), то вам следует использовать OneToOneField или поместите его непосредственно в модель пользователя (или профиль).
Я не знаю, что такое UserCover
, но вот как могут выглядеть ваши модели:
from django.contrib.auth.models import User
class UserProfile(models.Model):
# Link to Django normal User (name, email, pass)
user = models.ForeignKey(User, unique=True)
# Any information that a user needs, like cover, wathever that is, age, sexe, etc.
avatar = models.CharField(max_length=255)
Или вот так, если a будет часто использоваться повторно:
class Avatar(models.Model):
# name = ...
# description = ...
path = models.CharField(max_length=255)
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
avatar = models.ForeignKey(Avatar, unique=True)
# other data
Не связан с StackOverflow