Django REST框架:更改字段名称

1 投票
2 回答
2843 浏览
提问于 2025-04-18 12:11

我的Django应用程序为网站的用户提供只读的API访问权限。我创建了一个用户资料模型,并在用户模型的序列化器中使用了它:

模型:

# + standard User Model

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    display_name = models.CharField(max_length=20, blank=True)

序列化器:

class UserProfileSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = UserProfile
        fields = ('display_name',)

class UserSerializer(serializers.HyperlinkedModelSerializer):
    userprofile_set = UserProfileSerializer(many=False, label='userprofile')

    class Meta:
        model = User
        fields = ('id', 'username', 'userprofile_set')

这个方法是可行的,但字段userprofile_set看起来不太好。有没有办法更改这个字段的名字呢?

2 个回答

1

哦,我可以随便给这个变量起名字,比如我试过叫它 userprofile,但是这个名字和别的东西冲突了。如果我把这个字段叫 profile,那就没问题了。:)

class UserSerializer(serializers.HyperlinkedModelSerializer):
    profile = UserProfileSerializer(many=False, label='userprofile')

    class Meta:
        model = User
        fields = ('id', 'username', 'profile')
2

为了补充你的回答,你还可以利用关系的相关名称:

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True, related_name='profiles')
    display_name = models.CharField(max_length=20, blank=True)

这样你在代码中也可以使用这个:

user = User.objects.last() #some user
user.profiles.all() #UserProfiles related to this user, in a queryset
user.profiles.last() #the last UserProfile instance related to this user.

我建议你把那个外键(ForeignKey)改成一对一字段(OneToOneField)。这样每个用户就可以拥有一个且只有一个用户档案,这样你就不需要再去确保唯一性了:

class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name='profile')
    display_name = models.CharField(max_length=20, blank=True)

撰写回答