使用Django和其他框架的关系添加替换领域(Relationships with Django a

2019-11-02 19:28发布

我的用户休息框架对象有一个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/并与实际化身文件名添加一个化身场?

Answer 1:

我不知道我正确理解你的问题,但在这里我想问题。 读你的问题,我认为你是一个初学者,所以我回答这样。 很抱歉,如果它不是这种情况。

  • 你并不需要添加ID字段,它是由Django的,因为所有的表需要一个主键自动完成。 你只定义一个PK的时候,你需要将它命名的东西比“身份证”别人。
  • 你真的应该阅读Django的教程 ,说明如何定义模型。 User.cover_id和UserAvatar.file_id应该被定义为ForeignKey的。 如果您不知道外键是什么,然后停止使用Django打之前读取的数据库教程。
  • 目前已经是一个模型和一组类来管理用户在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)

或者这样,如果将经常重复使用:

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


文章来源: Relationships with Django and rest framework add replace fields