如何在Django-rest框架中加入非关系模型?

2024-04-18 17:27:32 发布

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

我对django rest框架中的连接而不是关系模型有一个问题。例如,我有两个模型:

  1. 模型类别模板

    class CategoryTemplate(models.Model):
         name = models.CharField(max_length=256)
    
  2. 模型商品

    class Commodity(models.Model):
         name = models.CharField(max_length=255, default=None, null=False)
    

    示例数据:

    *category template
    id    | name
     1    | Pupuk
     2    | Pestisida
    
    *commodity
    id    | name
     1    | Pisang
     2    | Semangka
    

我的问题是,对于这个模型,如何加入这个模型来得到这样的结果?你知道吗

 cat_temp_id | cat_temp_name | comm_id | comm_name | category
           1 |   Pupuk       |    1    | Pisang    | Pupuk Pisang
           1 |   Pupuk       |    2    | Semangka  | Pupuk Semangka
           2 |   Pestisida   |    1    | Pisang    | Pestisida Pisang
           2 |   Pestisida   |    2    | Semangka  | Pestisida Semangka

请给我建议。非常感谢。你知道吗


Tags: name模型idmodelmodelslengthmaxclass
2条回答

如果您引用的是非关系数据库,则不需要像在关系数据库中那样通过连接来实现最终结果。你知道吗

通过连接两个表,您试图实现的目标是什么?你知道吗

您要找的是笛卡尔积,而不是连接。你知道吗

因此,如果您只需对模型进行迭代,就没有必要弄乱它们。只需编写一个嵌套循环

category_templates = CategoryTemplate.objects.all()
commodities = Commodity.objects.all()

for cat in category_templates:
    for comm in commodities:
        category = "%s %s" % (cat.name, comm.name)

或者使用itertools.product

for (cat, comm) in itertools.product(
    CategoryTemplate.objects.all(),
    Commodity.objects.all()
):
    category = "%s %s" % (cat.name, comm.name)

相关问题 更多 >