首页 > 解决方案 > Django/Python。在对象列表中转换的 QuerySet 数据转换元组中的 str/int 值

问题描述

我在非常简单的操作中遇到了非常奇怪的问题。

模型.py

NbProducts(models.Model):
    brand = models.CharField(max_length=45, blank=True, null=True)
    name = models.CharField(max_length=45, blank=True, null=True)
    cluster = models.CharField(max_length=45, blank=True, null=True)
    target_market = models.CharField(max_length=10, blank=True, null=True)
    cpu_vendor = models.CharField(max_length=45, blank=True, null=True)
    base_platform = models.CharField(max_length=45, blank=True, null=True)
    gpu_list = models.CharField(max_length=45, blank=True, null=True)
    screen_size = models.CharField(max_length=45, blank=True, null=True)
    screen_resulution_list = models.CharField(max_length=45, blank=True, null=True)
    touchscreen = models.CharField(max_length=45, blank=True, null=True)

视图.py

    list_Products = NbProducts.objects.\
                    filter(id__in=products_for_execute).\
                    values('brand', 'name', 'id')
# list_Products:
#<QuerySet [{'brand': 'Acer', 'name': 'Aspire R7-372T', 'id': 2713}, 
#{'brand': 'Acer', 'name': 'Aspire S7-393', 'id': 2716}, 
#{'brand': 'Acer', 'name': 'Swift SF514-51', 'id': 2743},....

    class FProducts(object):
        def __init__(self, id, brand, name):

            self.id = str(id),
            self.brand = str(brand),
            self.name = str(name)

           print(self.id, self.brand, self.name)
    
    fproducts = list()
    for i in list(list_Products):
        fproducts.append(FProducts(id=i['id'], brand=i['brand'], name=i['name']))

>> {'2713',) ('Acer',) 'Aspire R7-372T'
>> {'2716',) ('Acer',) 'Aspire S7-393'
>> {'2743',) ('Acer',) 'Swift SF514-51'

所以。在没有任何命令的情况下,它将两个参数 - 'id' 和 'brand' 放到 Tuple 中。参数“名称” - 好吧,只是字符串。

我不明白这是怎么t need Tuple. And I don回事。

另外我把它放在了init中。

  self.id = self.id[0]
  self.brand = self.brand[0]

好的,它有帮助,应用程序正常工作。

但我看不到问题的根源。

它是 Python (3.7) 还是 Django (2.1.7) 的问题?

标签: pythondjangodjango-queryset

解决方案


您在这里自己创建了一个元组:

        self.id = str(id),
        self.brand = str(brand),
        self.name = str(name)

应该:

        self.id = str(id)
        self.brand = str(brand)
        self.name = str(name)

推荐阅读