我的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
看起来很难看。是否可以更改字段名称?
答案 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')