gpt4 book ai didi

python - 连接 2 个 Django 查询集

转载 作者:行者123 更新时间:2023-12-01 06:56:25 24 4
gpt4 key购买 nike

我在 django 中创建了 2 个查询集,它们结合了过滤器和计数,我需要找到一种方法来连接它们。

模型如下所示:

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class Jokes(models.Model):
user_id = models.ForeignKey(User, on_delete=models.CASCADE)
text = models.TextField()
date = models.DateTimeField()

class Likes(models.Model):
user_id = models.ForeignKey(User, on_delete=models.CASCADE)
joke_id = models.ForeignKey(Jokes, on_delete=models.CASCADE)
dislike = models.BooleanField()

class Meta:
unique_together = ('user_id', 'joke_id',)

查询如下所示:

jokeLikes = Likes.objects.filter(dislike = False).select_related('joke_id') 
jokeDislikes = Likes.objects.filter(dislike = True).select_related('joke_id')
countLikes = jokeLikes.values('joke_id__id', 'joke_id__text').annotate(Count('joke_id__id'))
countDislikes = jokeDislikes.values('joke_id__id','joke_id__text').annotate(Count('joke_id__id'))

我想要具有以下格式的输出:

joke_id、joke_text、NumberOfLikes、NumberOfDislikes

感谢任何帮助!

最佳答案

您可以注释 Jokes 对象:

from django.db.models import Count, Sum, Value
from django.db.models.functions import Coalesce

Jokes.objects.annotate(
number_of_likes=Coalesce(Count('likes')-Sum('likes__dislikes'), Value(0)),
number_of_dislikes=Coalesce(Sum('likes__dislike'), Value(0))
)

这将返回一个 Jokes 查询集,从此查询集中产生的每个 Jokes 对象将具有两个额外属性:.number_of_likes ,以及包含相关喜欢和不喜欢的数量的 .number_of_dislikes

Note: normally a Django model is given a singular name, so Joke instead of Jokes, and Like instead of Likes.

关于python - 连接 2 个 Django 查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58788413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com