我模型上的过滤器函数返回我 <QuerySet []>

Posted

技术标签:

【中文标题】我模型上的过滤器函数返回我 <QuerySet []>【英文标题】:The filter function on my model return me <QuerySet []> 【发布时间】:2021-09-01 19:04:48 【问题描述】:

我的 models.py 中有这个模型

我正在尝试发送我的购买详细信息并将其作为JSON 退回,但是 myModel.objects.filter 函数返回一个 void QuerySet 对象

models.py

class Purchase(models.Model):
    total = models.IntegerField()
    date = models.DateTimeField(auto_now=True)
    user_phone = models.CharField(max_length=50)
    id_user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    )

class Purchase_detail(models.Model):
    id_product = models.ForeignKey(Product, on_delete=models.CASCADE)
    id_purchase = models.ForeignKey(Purchase, on_delete=models.CASCADE)
    quantity= models.IntegerField()
    price = models.IntegerField()

但是当尝试做Purchase_detail.objets.filter 不起作用时

def see_purchase_detail(request, id):
    if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
        purchase_detail = json.loads(serializers.serialize(
            'json',
            Purchase_detail.objects.filter(id_purchase=id)
        ))
        print(purchase_detail, Purchase_detail.objects.filter(id_purchase=id))
        return JsonResponse('details': purchase_detail, safe=False)
    else:
        return JsonResponse(None, safe=False)

【问题讨论】:

我不知道它是否由于 id_purchase 参数是 ForeingKey 【参考方案1】:

我认为您的过滤器查询应该是这样的:

Purchase_detail.objects.filter(id_purchase__id=id))

这是因为ForeignKey 在 Django ORM 中的工作方式。查询中的id_purchasePurchase 对象。

我认为重命名ForeignKey 字段会更好。

class Purchase(models.Model):
    total = models.IntegerField()
    date = models.DateTimeField(auto_now=True)
    user_phone = models.CharField(max_length=50)
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    )

class Purchase_detail(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    purchase = models.ForeignKey(Purchase, on_delete=models.CASCADE)
    quantity= models.IntegerField()
    price = models.IntegerField()

现在过滤器应该是这样的:

Purchase_detail.objects.filter(purchase__id=id))

【讨论】:

以上是关于我模型上的过滤器函数返回我 <QuerySet []>的主要内容,如果未能解决你的问题,请参考以下文章

通过相关模型上的过滤器对 list_display 字段进行排序

Django,在模型中按函数过滤 Q 对象

c#函数有条件地返回不同的模型 - 存储库模式

使用 Postgres 函数作为 ActiveRecord 模型

Django中模型

Django模型查询集过滤器作为一个函数