与Django和rest框架的关系添加了替换字段

时间:2014-01-11 18:23:16

标签: django django-rest-framework

我的带有rest框架的用户对象有avatar_idcover_id。但我没有将其显示给API,而是希望它已经是实际的头像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/并添加具有实际头像文件名的头像字段?

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解你的问题,但在这里我认为问题是什么。读你的问题,我以为你是初学者,所以我这样回答。对不起,如果不是这样的话。

  • 您不需要添加id字段,它由Django自动完成,因为所有表都需要主键。只有当您需要将其命名为“id”以外的其他名称时才定义PK。
  • 您应该阅读解释如何定义模型的Django tutorial。 User.cover_id和UserAvatar.file_id应定义为ForeignKey。如果您不知道外键是什么,那么请停止使用Django并阅读数据库教程。
  • Django中已经有一个模型和一组类manage your users。你应该使用它们。例如,“用户个人资料”是extend the user model的正确方式。
  • 如果您强制用户在一组预定义的头像中选择一个头像,那么您想要做的就是确定。如果用户可以选择任何头像(上传),那么您应该使用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