【问题标题】:Take list of all objects ids获取所有对象 ID 的列表
【发布时间】:2023-03-22 22:50:01
【问题描述】:

我有 model Product,其中作为主键使用代码字段,即 UUID。我想获取所有产品的 id 列表。

我想要这样的列表:

['14431ec4-3224-480f-85e2-b541891919b1', '6e54636b-7283-4504-a16f-f54d29db26f2']

我尝试了下一个代码,但它返回给我:

[UUID('14431ec4-3224-480f-85e2-b541891919b1'), UUID('6e54636b-7283-4504-a16f-f54d29db26f2')]

models.py:

class Product(models.Model):
    code = models.UUIDField(_('Code'), primary_key=True, default=uuid.uuid4, editable=False)

views.py:

products = Product.objects.all()
product_ids = []
for product in products:
    product_ids.append(product.code)
print(product_ids)

如何解决这个问题?

【问题讨论】:

    标签: python django python-3.x django-1.10


    【解决方案1】:

    您可以在您的Queryset 对象上使用.values_list()flat=True 以将模型的codestr 列表与map 一起使用,以将每个UUID 对象类型化为字符串:

    map(str, Product.objects.all().values_list('code', flat=True))
    

    有关uuid 模块的典型用法,另请参阅UUID examples

    【讨论】:

      【解决方案2】:

      这只是因为它是一个UUID 字段。如果您确实需要它们作为字符串,只需调用str()

      product_ids = [str(product.code) for product in products]
      

      【讨论】:

        【解决方案3】:

        您可以使用 .hex 从uuid 获取字符串值,如下所示:

         ids = [product.uuid.hex for product in products]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-08
          • 1970-01-01
          • 2012-11-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多