如何从Django数据库追加查询对象?

2024-05-29 01:40:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有两个数字字段的模型。我试图查询这些数字,并将它们附加到其他数字中。我该怎么做?如何处理查询的对象

这是一个模型

class Post(models.Model):
    title = models.CharField(max_length=100)
    num1 = models.IntegerField(blank=True,default=0)
    num2 = models.IntegerField(blank=True,default=0)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)


    def __str__(self):
        return self.title
    
    def get_absolute_url(self):
        return reverse('diary:post-detail', kwargs={'pk': self.pk})

这是视图(这里我尝试查询和处理查询的对象)

def home(request):
    a = Post.objects.values('num1')
    b = Post.objects.values('num2')
    result = a + b 
    context = {
        'result': result,
        }
    
    return render(request, 'diary/home.html', context)

这是我的模板的工作部分

{% for x in result %}
    
   
    <p> {{ x }} </p>

{% endfor %}

这就是我得到的错误

TypeError at /
unsupported operand type(s) for +: 'QuerySet' and 'QuerySet'

C:\Users\detal\Coding\Trading Diary3\TradingDiary\diary\views.py, line 11, in home
    result = a + b  

Tags: 对象模型selfdefaulthomereturntitlemodels
2条回答

您的查询将返回字典。要添加这两个查询,您可以尝试

result = q.union(b) 

看起来更干净

records = query1 | query2

如果不需要重复,请添加.distinct()

records = (query1 | query2).distinct()

如果您只需要特定字段,您可以尝试

Post.objects.all().values_list(
"num2").union(Post1.objects.all().values_list("num1"))

或者如果它来自同一张桌子

Post1.objects.all().values_list("num1","num2"))

我解决了。以下是我的视图代码:

def home(request):
    x = Post.objects.all().values_list("num1","num2")
    array = []
    for i in x:
        y = i[0] + i[1]
        array.append(y)  

   
    context = {
        'posts': Post.objects.all(),
        'array':array,
        }
    
    return render(request, 'diary/home.html', context)

和模板代码:

{% for i in array %}
    <p> {{ i }} </p>
{% endfor %}

输出是num1和num2的附加编号列表。在解决时,我也遇到了一个问题——您不需要在视图中“返回”for循环结果。它只有在没有它的情况下才能工作

相关问题 更多 >

    热门问题