Django REST Framework:更改字段名称

时间:2014-07-05 10:29:43

标签: python django django-rest-framework

我的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 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

哦,我可以根据需要命名变量userprofile_set。首先,我测试了冲突的名称userprofile。如果我将字段profile命名为有效。 :)

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

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