0

我有两张表如下,

内阁

cabinet_id     cabinet_name
1               Test1
2               Test2
3               Test3

橱柜映射

id   product_id    cabinet_id   size
1      34              1            20
2      34              3            25

如何从橱柜表中选择所有橱柜名称cabinet_mapingproduct_id = 34在 Django

预期输出如下,

cabinet_id   cabinet_name    size
1             Test1            20
2             Test2            0
3             Test3            25
4

2 回答 2

0

我认为你的模型可能看起来像

class Cabinet(models.Model):
     name = models.CharField(max_length = 30)

class cabinet_maping(models.Model):
     product = models.ForeignKey(Product)
     cabinet = models.ForeignKey(Cabinet)
     size = .....

你应该这样做:

cabinet_name = cabinet_maping.objects.filter(product__id = 34)

for item in cabinet_name:
     print item.cabinet.id 
     print item.cabinet.name
     print item.size

我没有检查它,但我认为这应该有效(有效:))

于 2013-06-06T14:24:54.933 回答
0

我同意 Silwestpl 的观点,即你的模型是错误的,因为使用外键会使这个查询变得更容易。但只是回答你的问题。我假设您没有提到任何两个表之间的任何关系。

x = Cabinet_mapping.objects.filter(product_id = somevalue).distinct('cabinet_id')

response_list = []

for y in x:
    response_dict = {}
    response_dict['cabinet_id'] = y.cabinet_id
    response_dict['cabinet_name'] = cabinet.objects.get(id = y.cabinet_id).cabinet_name
    response_dict['size'] = y.size

    response_list.append(response_dict)

return response_list

根据您提供的详细信息,这将是答案。

但理想情况下,我会做这样的事情

class Product(models.Model):
   # id is generated automatically.
   ## any other fields that you want for product.

class Cabinet(models.Model):
   # again id is auto-genearated.
   cabinet_name = models.CharField(max_length=100)
   cabinet_size = models.IntegerField()
   products = models.ManytoManyField(Product)#This automatically maps product_id n cabinet_id.

你的查询将是。

x = Cabinet.objects.filter(product.id=some_value)
print (x.id , x.cabinet_name, x.cabinet_size) # I used print, but you can use it anyway you want.

这将是您所需要的。如果您正在寻找严重的问题,请使用第二种解决方案。

于 2013-06-07T06:35:11.810 回答