繁体   English   中英

如何在Django rest Framework中执行Delete操作?

[英]How to Perform a Delete operation in Django rest Framework?

您好,我是Django rest框架的新成员,我想创建自定义删除功能来删除。我成功创建了按以下代码创建更新的代码,但是我无法创建删除功能。但是我搜索了很多有关它的文章,但没有找到。希望你会帮助我的。

1. models.py

   class User(AbstractUser, BaseModel):


    full_name = models.CharField(max_length=64)

        addresss=models.CharField(max_length=40)

        phoneno=models.IntegerField(null=True, blank=True)

        email=models.EmailField()

        password=models.CharField(max_length=40)

        re_password=models.CharField(max_length=40)


        gender=models.IntegerField(choices=gender_choice,default='0')

    ##models for student register
    class Student(BaseModel):
        user = models.ForeignKey(User, on_delete=models.CASCADE)

        father_name=models.CharField(max_length=64)
        mother_name=models.CharField(max_length=60)
        date_of_birth=models.DateField(null=True)

        def __str__(self):
            return self.user.full_name

2. Serializer.py

    class StudentSerializer(serializers.HyperlinkedModelSerializer):
        user = UserSerializer()
        class Meta:
            model=Student
            fields=(
                'id',
                'father_name',
                'mother_name',
                'date_of_birth',
                'user',
                )

 3. serializer.for user

    class UserSerializer(serializers.HyperlinkedModelSerializer):
        class Meta:
            model = User
            fields=('full_name','id','addresss','phoneno','email','password','re_password','gender')

4. views.py

    class StudentViewset(viewsets.ModelViewSet):
        queryset = Student.objects.all()
        serializer_class = StudentSerializer

        http_methods = ['get', 'post','put',]


        def create(self, request):
            serializer = self.get_serializer(data=request.data)
            serializer.is_valid(raise_exception=True)

            row = serializer.data
            user = row['user']

            if user['password'] != user['re_password']:
                return Response({'message':'pw not matched'})

            email = username = row['user']['email']

            user, created = User.objects.get_or_create(email=email, 
                defaults={'full_name':row['user']['full_name'],'addresss':row['user']['addresss'],
                'phoneno':row['user']['phoneno'],'password':row['user']['password'] ,'re_password':row['user']['re_password'],
                'gender':row['user']['gender'] ,'username':username})

            if created == False:
                return Response({'message':'Sorry the student is already registered.'})

            student = Student.objects.create(user_id=user.id)

            return Response(row)

        def update(self,request,*args,**kwargs):
            instance=self.get_object()
            serializer=StudentUpdateSerializer(data=request.data)

            serializer.is_valid(raise_exception=True)

            data = serializer.data
            if data.get('father_name', False):
                instance.father_name = data.get('father_name')

            if data.get('mother_name', False):
                instance.mother_name = data.get('mother_name')

            instance.save()
            return Response(serializer.data)
Q.
def delete(..)#How to write this delete Function???

ModelViewSet有一个函数,当您执行DELETE请求时会调用该函数,并将其称为destroy

它是这样的:

    def destroy(self, request, *args, **kwargs):
        instance = self.get_object()
        self.perform_destroy(instance)
        return Response(status=status.HTTP_204_NO_CONTENT)

因此,要从数据库中删除实例,您可以

instance.delete()

这实际上是perform_destroy所做的。

因此,您可以从中获得启发并实现自定义删除。

还有如通用删除类基于视图点击这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM