简体   繁体   English

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

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

Hello Iam new in Django rest framework,i want to create custom delete funtion to delete .I successfully created create and update as in my below code but i cant create delete function.But i searched lots of article about it but i havent found .Hopefully U will help me . 您好,我是Django rest框架的新成员,我想创建自定义删除功能来删除。我成功创建了按以下代码创建更新的代码,但是我无法创建删除功能。但是我搜索了很多有关它的文章,但没有找到。希望你会帮助我的。

1. models.py 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 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 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 has a function which is called when you do DELETE request and it is called destroy ModelViewSet有一个函数,当您执行DELETE请求时会调用该函数,并将其称为destroy

This is how it looks like: 它是这样的:

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

So to delete the instance from your DB - you can do 因此,要从数据库中删除实例,您可以

instance.delete()

that's what actually perform_destroy does. 这实际上是perform_destroy所做的。

So you can take inspiration from this and implement your custom delete. 因此,您可以从中获得启发并实现自定义删除。

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

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

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