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

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

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

class MasterIndividualMembers(models.Model):
    individualmemberId = models.CharField(primary_key=True, max_length=100, default=1)
    ...
    ...

    def __str__(self):
        return self.firstname + " " + self.lastname

class IndividualMemberPhotos(models.Model):
    individualmemberId = models.ForeignKey(MasterIndividualMembers, default=None,on_delete=models.CASCADE)
    image = models.ImageField(upload_to="individualmemberphotos/")

class IndividualMemberCatalogue(models.Model):
    individualmemberId = models.ForeignKey(MasterIndividualMembers, default=None,on_delete=models.CASCADE)
    files = models.FileField(upload_to="individualmembercatalogue/")

管理员

class IndividualMemberPhotosAdmin(admin.StackedInline):
    model = IndividualMemberPhotos

class IndividualMemberCatalogueAdmin(admin.StackedInline):
    model = IndividualMemberCatalogue

@admin.register(MasterIndividualMembers)
class MasterIndividualMembersAdmin(admin.ModelAdmin):
    inlines = [IndividualMemberPhotosAdmin,IndividualMemberCatalogueAdmin]

    class Meta:
       model = MasterIndividualMembers

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

@csrf_exempt
@api_view(['POST'])
@permission_classes([IsAuthenticated])
def get_individualmember(request):
    if request.method == 'POST':
        try:
            individualmemberId = request.POST.get('individualmemberId')
            result = {}
            result['individualMemberDetails'] = json.loads(serializers.serialize('json', [MasterIndividualMembers.objects.get(individualmemberId=individualmemberId)]))
            result['individualPhotoDetails'] = json.loads(serializers.serialize('json', IndividualMemberPhotos.objects.filter(individualmemberId__individualmemberId = individualmemberId)))
            result['individualCatalogueDetails'] = json.loads(serializers.serialize('json', IndividualMemberCatalogue.objects.filter(individualmemberId__individualmemberId = individualmemberId)))
        except Exception as e:
            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返回的异常:

相关问题