我正在尝试为OneToOne字段创建基本的CRUD操作 . 登录时,用户无需设置配置文件 . 如何在需要时创建/更新/删除配置文件(假设用户已在数据库中)?
我的模型是Django REST的默认用户模型,并且:
class UserProfile(models.Model):
user = models.OneToOneField(User)
location = models.CharField(max_length=50,blank=True)
title = models.CharField(max_length=80,blank=True)
#picture = models.ImageField(upload_to='user_imgs', blank=True)
website = models.URLField(blank=True)
我的视图集是:
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
filter_fields = ['id', 'username', 'email', 'first_name', 'last_name']
class UserProfileViewSet(viewsets.ModelViewSet):
queryset = UserProfile.objects.all()
serializer_class = UserProfileSerializer
filter_fields = ['user_id', 'location', 'title', 'website']
并序列化:
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
email = serializers.EmailField()
fields = ('id','username', 'email', 'first_name', 'last_name')
class UserProfileSerializer(serializers.HyperlinkedModelSerializer):
user_id = serializers.CharField(source='user.id')
class Meta:
model = UserProfile
fields = ('user_id', 'location','title','website')
2 回答
我相信你想要将配置文件创建限制为当前登录用户 . 您可以将配置文件的查询集过滤到当前用户,这样只有登录用户才能访问该用户的配置文件 .
您将
user
字段设置为只读并保存在上述方法perform_create
中,并始终分配给当前用户 .它应该集中定义
view
如何接收请求和处理原始数据,而不是字段定义的model
和serializer
.我给你一个基本
User
操作的CRUD示例作为参考:lu = LibraryUser(library_membership_number ='...',user_id = user)
根据示例,这些是我对每种方法的定义:
GET
:检索用户 ProfilesPOST
:创建新用户PUT
:更改密码的用户DELETE
:删除用户因此,它将为
user
实例实现Basic CRUD api .我希望它可以帮助你如何设计api .
如果您还不了解如何操作
model
,我将更多介绍该示例: