python - Django REST: create CRUD operations for OneToOne Field -
i'm trying create basic crud operations onetoone field. user not required set profile when signing in. how create/update/delete profile when needed (assuming user in db)?
my models default user models django rest and:
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)
my viewsets are:
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']
and serializes:
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')
i belive want restrict profile creation current logged in user. can filter queryset of profiles current user, way user's profile accessible logged in user.
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'] def get_queryset(self): return super(userprofileviewset, self).get_queryset().filter( user=self.request.user) def perform_create(self, serializer): serializer.save(user=user)
you make user
field read , being saved in above method perform_create
, assigned current user.
class userprofileserializer(serializers.hyperlinkedmodelserializer): class meta: model = userprofile fields = ('user', 'location','title','website') read_only_fields = ('user',)
Comments
Post a Comment