【问题标题】:How to append queried objects from Django database?如何从 Django 数据库中追加查询的对象?
【发布时间】:2023-03-19 11:45:01
【问题描述】:

我有一个带有 2 个数字字段的模型。我正在尝试查询这些数字并将它们附加到彼此。我怎么做?如何处理查询的对象?

这是模特

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  

【问题讨论】:

  • ab的类型是什么?看来您假设它们是数字。但它们真的是数字吗?错误消息表明它们是“QuerySet”类型。
  • 是的,它们是查询。我的问题是如何使用查询类型对象?我在数据库中有多个 num1 和 num2 (都属于一个模型),我想将 num1 和 num2 附加在一起并将结果值分配给一个新对象(无论是立即给出值还是将其存储在数据库)。欢迎任何解决方案!

标签: python django django-models django-views django-queryset


【解决方案1】:

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

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"))

【讨论】:

    【解决方案2】:

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

    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 循环结果。只有没有它才能工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 2021-02-01
      • 2011-10-31
      • 2018-06-29
      • 2011-05-21
      • 1970-01-01
      • 2021-08-04
      相关资源
      最近更新 更多