Уничтожить APIView по нескольким условиям - PullRequest
0 голосов
/ 29 июня 2019

У меня есть модели данных, такие как:

from django.db import models


class Student(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.EmailField()

    def __str__(self):
        return self.first_name + ' ' + self.last_name


class Course(models.Model):
    name = models.CharField(max_length=255)
    description = models.TextField()
    start_date = models.DateField(null=True)
    end_date = models.DateField(null=True)

    def __str__(self):
        return self.name


class CourseParticipant(models.Model):
    course = models.ForeignKey(Course, related_name='courses', on_delete=None)
    student = models.ForeignKey(Student, related_name='students', on_delete=None)
    completed = models.BooleanField(null=True, default=False)

    def __str__(self):
        return self.course

У меня есть такой сериализатор, как:

class AssignStudentToCourseSerializer(serializers.ModelSerializer):
    class Meta:
        model = CourseParticipant
        fields = ('id', 'student', 'course')

class UnassignedStudentFromCourseSerializer(serializers.ModelSerializer):
    class Meta:
        model = CourseParticipant
        fields = ('student_id', 'course_id')

У меня есть представления для этого

class AssignStudentToCourse(generics.CreateAPIView):
    serializer_class = AssignStudentToCourseSerializer


class UnassignedStudentFromCourse(generics.DestroyAPIView):
    serializer_class = UnassignedStudentFromCourseSerializer
    queryset = CourseParticipant.objects.all()

У меня есть таблица CourseParticipant с некоторыми записями

-------------------------------------------
| id         | course_id   | student_id   |
|------------|-------------|--------------|
| 1          |      2      |     2        |
| 2          |      3      |     2        |
| 3          |      2      |     3        |
| 4          |      2      |     4        |
-------------------------------------------

Мне нужно удалить записи из этой таблицы по course_id и student_id. Теперь используйте DestroyAPIView Я могу удалить record на id, но это сделано неправильно. Как я могу удалить record из моей таблицы по нескольким условиям?

1 Ответ

1 голос
/ 29 июня 2019

с DestroyAPIView вы можете удалить только тот экземпляр, который вы вызываете, используя определенный URL

Если вы хотите удалить CourseParticipant, позвонив студенту по URL

сначала создайте представление, чтобы получить экземпляр студента и получить связанный с ним объект, а затем удалите его

class StudentApiView(generics.RetrieveAPIView):
    queryset = Student.objects.all()


    def get(self, request, *args, **kwargs):
        print(self.get_object(),)
        instance = self.get_object()
        course_participant_obj = CourseParticipant.objects.get(student=instance)
        course_participant_obj.delete()
        return Response('deleted', )
...