簡體   English   中英

get() 返回了多個模塊——它返回了 2 個! (休息 API - Django)

[英]get() returned more than one Modules -- it returned 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    ```

當我發布: {“name”:“steve”,“age”:16,“grade”:10,“modules”:[{“module_name”:“math”},{“module_name”:“physics”}] }

它說:

/app_Five/student/get() 處的 MultipleObjectsReturned 返回了多個模塊——它返回了 2 個!

我知道 get() 只得到一個元素。 但我認為在上面的“for”循環中,每個循環只存在一個“module_name”。 所以每次 get() 執行時,它只能得到一個結果。 誰能告訴我我在那里做錯了什么?

您似乎希望模塊名稱是唯一的。 您可能在數據庫中有多個具有相同module_nameModules條目。

為了確保在創建模塊條目時名稱唯一,您可以更改模塊 model 以強制執行此操作:

class Modules(models.Model):
    module_name = models.CharField(unique=True, max_length=50)
    module_duration = models.IntegerField()
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM