Отношения с Django и инфраструктурой отдыха добавляют поля замены.

StackOverflow https://stackoverflow.com//questions/21066134

  •  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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top