我有两张表如下,
柜
cabinet_id cabinet_name
1 Test1
2 Test2
3 Test3
cabinet_maping
id product_id cabinet_id size
1 34 1 20
2 34 3 25
如何从Django中cabinet_maping
。product_id = 34
的橱柜表中选择所有cabinet_name
预期输出如下,
cabinet_id cabinet_name size
1 Test1 20
2 Test2 0
3 Test3 25
答案 0 :(得分: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
我没有检查它,但我认为这应该有用(有效:))
答案 1 :(得分: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.
这就是你所需要的。如果你正在研究一些严肃的事情,请使用第二种解决方案。