Django REST框架:更改字段名称
我的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)