Python django查询数据库,并在列表中获取所有FK

问题描述

我是django的新手,我正在努力实现Rest API。我的问题是查询,无论花多少时间都找不到有效的解决方案。更具体地说,我有以下两种模型:

class Subcategory(models.Model):
    id = models.UUIDField(primary_key=True,editable=False,null=False,blank=False,default=uuid.uuid4)
    name = models.CharField(max_length=50,blank=False)
    category = models.ForeignKey(Category,on_delete=models.CASCADE,db_column='category')

class Category(models.Model):
    id = models.UUIDField(primary_key=True,null=False)
    image = models.CharField(max_length=100,default=None) 

如您所见,每个类别都有一个或多个子类别,在子类别模型中,我具有该类别的外键。我想做的是查询我的数据库,获取所有类别,并向每个类别添加一个带有子类别列表的额外字段子类别。我的想法是使用.select_related遵循FK,但这似乎是错误的解决方案,因为我遇到以下错误:

"message": "name 'subcategory__category' is not defined"

我的查询是:

Category.objects.all().select_related(subcategory__category).values()

关于如何解决此问题并找到实现查询的方法的任何想法?

提前谢谢

解决方法

这样做

class Category(models.Model):

   id = models.UUIDField(primary_key=True,editable=False,null=False,blank=False,default=uuid.uuid4)
   name = models.CharField(max_length=50,null=False)
   image = models.CharField(max_length=100,default=None) 
   sub_cat = ManyToManyField(Subcategory,blank=True)

class Subcategory(models.Model):

    id = models.UUIDField(primary_key=True,default=uuid.uuid4)
    name = models.CharField(max_length=50,blank=False)

    def __str__(self):   
       return self.name

现在,查询部分

temp = []
all_cat = Category.objects.all()
for cat in all_cat:
  temp.append( list(cat.sub_cat.all()) )

  

我认为这是您想要做的。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...