Get() вернул более одного Модуля - он вернул 2! (REST API - Django)

Я застрял в этой проблеме почти на 2 дня. Вот в чем проблема. Мои модели выглядят следующим образом:

class Modules(models.Model):
    module_name = models.CharField(max_length=50)
    module_duration = models.IntegerField()
    class_room = models.IntegerField()
    def __str__(self):
        return self.module_name
class Students(models.Model):
    name = models.CharField(max_length=50)
    age = models.IntegerField()
    grade = models.IntegerField()
    modules = models.ManyToManyField(Modules)
    def __str__(self):
        return self.name

Мои взгляды здесь:

class StudentsViewSet(viewsets.ModelViewSet):
    serializer_class = StudentsSerializer
    def get_queryset(self):
        student = Students.objects.all()
        return student
    def create(self,request,*args, **kwargs):
        data = request.data
        new_student = Students.objects.create(name=data["name"], age=data['age'], grade=data["grade"])
        new_student.save()
        for module in data["modules"]:
            module_obj = Modules.objects.get(module_name=module["module_name"])
            new_student.modules.add(module_obj)
        serializer = StudentsSerializer(new_student)
        return Response(serializer.data)
class ModulesViewSet(viewsets.ModelViewSet):
    serializer_class = ModudesSerializer
    def get_queryset(self):
        module = Modules.objects.all()
        return module    ```

Когда я ПОСТ: { "имя": "steve", "age": 16, "класс": 10, "modules": [ { "имя_модуля": "math" }, { "имя_модуля": "физика" } ] }

В нем говорится:

MultipleObjectsReturned at /app_Five/student/ get() вернул более одного Модуля - он вернул 2!

Я понимаю, что get() получает только один элемент. Но я думаю, что в приведенном выше цикле "for" для каждого цикла существует только одно "имя_модуля". Поэтому каждый раз, когда выполняется get(), он получает только один результат. Может ли кто-нибудь сказать мне, что я сделал не так?

Похоже, вы ожидаете, что имя модуля будет уникальным. Вероятно, у вас в базе данных есть несколько записей Modules с одинаковым module_name.

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

class Modules(models.Model):
    module_name = models.CharField(unique=True, max_length=50)
    module_duration = models.IntegerField()
...
Вернуться на верх