get() 返回了多个模块——它返回了 2 个! (REST API - Django)
Posted
技术标签:
【中文标题】get() 返回了多个模块——它返回了 2 个! (REST API - Django)【英文标题】:get() returned more than one Modules -- it returned 2! (REST API - Django) 【发布时间】:2022-01-11 15:01:31 【问题描述】:这是我的模型:
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"
]
*
上面写着:
MultipleObjectsReturned at /app_Five/student/
get() returned more than one Modules -- it returned 2!
我知道get()
只得到一个元素。但我认为在上面的for
循环中,每个循环只存在一个module_name
。所以每次get()
执行时,它只能得到一个结果。谁能告诉我我在那里做错了什么?
【问题讨论】:
要检查问题,您可以用 `Modules.objects.filter(module_name=module["module_name"])` 替换该行,然后记录/打印找到的模块。可能在您的数据库中存在多个具有给定名称的实例。 这意味着你的数据库包含多个同名的Module
对象。
【参考方案1】:
您似乎希望模块名称是唯一的。您可能在数据库中有多个 Modules
条目具有相同的 module_name
。
为了在创建模块条目时确保名称唯一,您可以更改模块模型以强制执行此操作:
class Modules(models.Model):
module_name = models.CharField(unique=True, max_length=50)
module_duration = models.IntegerField()
...
【讨论】:
以上是关于get() 返回了多个模块——它返回了 2 个! (REST API - Django)的主要内容,如果未能解决你的问题,请参考以下文章
Django 动态过滤 ListView 返回错误:get() 为参数“self”获取了多个值
如何在涉及多个get_terms()的WordPress函数中返回多个值