get()返回了多个--django restframework

owfi6suc  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(335)

我有一个django模型,它需要有1个以上的图像和1个以上的文件(数字可能会根据需要而变化),为此我相应地调整了我的管理面板,如下所示
models.py

  1. class MasterIndividualMembers(models.Model):
  2. individualmemberId = models.CharField(primary_key=True, max_length=100, default=1)
  3. ...
  4. ...
  5. def __str__(self):
  6. return self.firstname + " " + self.lastname
  7. class IndividualMemberPhotos(models.Model):
  8. individualmemberId = models.ForeignKey(MasterIndividualMembers, default=None,on_delete=models.CASCADE)
  9. image = models.ImageField(upload_to="individualmemberphotos/")
  10. class IndividualMemberCatalogue(models.Model):
  11. individualmemberId = models.ForeignKey(MasterIndividualMembers, default=None,on_delete=models.CASCADE)
  12. files = models.FileField(upload_to="individualmembercatalogue/")

管理员

  1. class IndividualMemberPhotosAdmin(admin.StackedInline):
  2. model = IndividualMemberPhotos
  3. class IndividualMemberCatalogueAdmin(admin.StackedInline):
  4. model = IndividualMemberCatalogue
  5. @admin.register(MasterIndividualMembers)
  6. class MasterIndividualMembersAdmin(admin.ModelAdmin):
  7. inlines = [IndividualMemberPhotosAdmin,IndividualMemberCatalogueAdmin]
  8. class Meta:
  9. model = MasterIndividualMembers

对于视图,我只需创建一个函数来提供所有图像、文档和该用户的详细信息
views.py

  1. @csrf_exempt
  2. @api_view(['POST'])
  3. @permission_classes([IsAuthenticated])
  4. def get_individualmember(request):
  5. if request.method == 'POST':
  6. try:
  7. individualmemberId = request.POST.get('individualmemberId')
  8. result = {}
  9. result['individualMemberDetails'] = json.loads(serializers.serialize('json', [MasterIndividualMembers.objects.get(individualmemberId=individualmemberId)]))
  10. result['individualPhotoDetails'] = json.loads(serializers.serialize('json', IndividualMemberPhotos.objects.filter(individualmemberId__individualmemberId = individualmemberId)))
  11. result['individualCatalogueDetails'] = json.loads(serializers.serialize('json', IndividualMemberCatalogue.objects.filter(individualmemberId__individualmemberId = individualmemberId)))
  12. except Exception as e:
  13. return HttpResponseServerError(e)

问题:在获取任何单个成员的详细信息时,它会抛出一个错误 get() returned more than one IndividualMemberPhotos -- it returned 2! ,它应具有多个对象。
如何使restframework同时提供所有图像对象的详细信息。

mftmpeh8

mftmpeh81#

而不是使用 get() 它严格地返回单个元素,使用 filter() 返回0个或多个元素。
如中所述https://docs.djangoproject.com/en/3.2/topics/db/queries/#retrieving-带get的单对象
filter()将始终为您提供一个queryset,即使只有一个对象与查询匹配——在本例中,它将是一个包含单个元素的queryset。
如果您知道只有一个对象与您的查询匹配,则可以在直接返回该对象的管理器上使用get()方法:
您正在经历的行为实际上记录在这里https://docs.djangoproject.com/en/3.2/ref/models/querysets/#django.db.models.query.queryset.get
如果get()找到多个对象,则会引发model.MultipleObject返回的异常:

相关问题