我使用的是Django用户模型,也为其他一些用户扩展了我自己的概要模型数据。什么时候我想更新配置文件模型中的用户数据,因为所有的用户id、用户名、电子邮件、密码都位于用户模型中,而需要更新的字段则位于配置文件模型中。我使用了这种方法,它所做的只是接受输入并显示响应,但在整体上查看用户数据时不会显示任何更改。在
模型.py
class Profile(models.Model):
user = models.OneToOneField(User,related_name='profile',on_delete=models.CASCADE)
location = models.CharField(max_length=30,blank=True)
friends_count = models.PositiveIntegerField(default=0)
profile_pic = models.FileField(upload_to='profile_pics/',blank=True,null=True)
def natural_key(self):
return (self.user.username,)
视图.py
^{pr2}$网址.py
url(r'^user-update/(?P<pk>\d+)/$',views.UserUpdateAPI.as_view(),name="user-update"),
router = DefaultRouter()
router.register(r'profile',views.UserCreateAPIViewSet)
序列化程序.py
class UserProfileCreateSerializer(serializers.ModelSerializer):
""""A serializer for user data request"""
location = serializers.CharField(source='profile.location')
friends_count = serializers.IntegerField(source='profile.friends_count',read_only=True)
profile_pic = serializers.FileField(source='profile.profile_pic',allow_empty_file=True,allow_null=True)
class Meta:
model = User
fields = (
'pk',
'username',
'email',
'password',
'location',
'friends_count',
'profile_pic',
)
extra_kwargs = {
'password':{'write_only':True},
'friends_count':{'read_only':True},
}
def create(self, validated_data):
""""Create and return a new User"""
user = User(
email = validated_data['email'],
username = validated_data['username']
)
user.set_password(validated_data['password'])
user.save()
return user
class ProfileUpdateSerializer(serializers.ModelSerializer):
"""A serializer for updating user data"""
class Meta:
model = Profile
fields = ('location','profile_pic')
看起来您希望从AbstractBaseUser扩展(请参见下面的代码),将其用作您的
UserProfileCreateSerializer
:然后从
^{pr2}$models.py
中的AbstractBaseUser
扩展:然后在与
models.py
相同的目录中创建一个名为managers.py
的文件:要完成所有这些,您需要将其添加到
settings.py
文件中:在使用
$ python manage.py runserver
之前,不要忘记重新运行所有数据库迁移。在相关问题 更多 >
编程相关推荐