我有一个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同时提供所有图像对象的详细信息。
1条答案
按热度按时间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返回的异常: