python - Django通过外键查询某些属性
问题描述
我想从外键类中查询某些数据。有没有办法直接在查询中进行?
我想做以下查询:
plant_list = Plant.objects.filter(plant_product = ikey).values('plant_number', 'plant_name', 'plant_city', 'plant_country', 'plant_product')
我的结果是:
{'plant_number': '0001', 'plant_name': 'HoP1', 'plant_city': 3, 'plant_country': 1, 'plant_product': 1}
现在,例如在plant_city。我不想拥有我想要拥有模型 City 的属性 city_name 的 ID,它是外键。
所以这是我想要的结果:
{'plant_number': '0001', 'plant_name': 'HoP1', 'plant_city': 'Homburg', 'plant_country': 'Germany', 'plant_product': 1}
有没有优雅的方法?
那将是一个非常好的帮助!
这是我的模型:
class City(models.Model):
city_name = models.CharField(max_length=100, unique=True)
class Meta:
ordering = ['city_name']
# changes view in admin area
verbose_name_plural = ('Cities')
def __str__(self):
return self.city_name
class Country(models.Model):
country_name = models.CharField(max_length=100, unique=True)
class Meta:
ordering = ['country_name']
verbose_name_plural = 'Countries'
def __str__(self):
return self.country_name
class Plant(models.Model):
plant_number = models.CharField(max_length=10, unique=True)
plant_name = models.CharField(max_length=10, unique=True)
plant_city = models.ForeignKey(City, on_delete=models.CASCADE)
plant_country = models.ForeignKey(Country, on_delete=models.CASCADE)
plant_product = models.ManyToManyField(TPZProductCluster1)
updated_at = models.DateField(auto_now=True)
class Meta:
ordering = ['plant_number']
def plant_produces(self):
return ', '.join([p.pc1_product for p in self.plant_product.all()])
def __str__(self):
return self.plant_name + " (" + str(self.plant_number) +")"
先感谢您!!!
解决方案
如果要包含城市名称,可以使用F
对象:
from django.db.models import F
plant_list = Plant.objects.filter(
plant_product=ikey
).values(
'plant_number',
'plant_name',
'plant_country',
'plant_product'
city=F('plant_city__city_name')
)
话虽如此,通常使用.values()
并不是一个好主意。例如,如果要将数据序列化为 JSON blob,最好使用序列化程序,例如使用Django REST 框架。
推荐阅读
- jasper-reports - 如何使用数据库检查 iReport 中的参数?
- angular - Angular 访问图像 src 属性
- microsoft-cognitive - 使用语音 SDK 自定义唤醒词
- ethereum - 空投合约不起作用
- javascript - Three.js 节点 TextureLoader 不工作
- phonegap - 如何在函数中使用framework7预加载器
- javascript - 如何在迭代时删除数组中的元素
- c++ - 无法在需要对象展开修复的函数中使用 __try
- azure - Azure Active Directory 公司品牌 - 无法编辑
- angular - 如何从 json 角度检索键和值