python - Django 查询 ManyToMany 字段作为列表
问题描述
我想查询多个字段并将其直接保存为列表。
这是我的查询:
inventory_list = list(Inventory.objects.filter(inventory_plant__plant_name = ikey ,inventory_product__pc1_product=ikey2).values(
'inventory_number',
'inventory_name',
'inventory_process_name__process_name'
))
这是我的结果:
inventory_list = [{'inventory_number': 1211267, 'inventory_name': 'Käfig1', 'inventory_process_name__process_name': 'Turning'}, {'inventory_number': 1211267, 'inventory_name': 'Käfig1', 'inventory_process_name__process_name': 'Grinding'}, {'inventory_number': 1211267, 'inventory_name': 'Käfig1', 'inventory_process_name__process_name': 'Heat Treatment'}, {'inventory_number': 1217729, 'inventory_name': 'Käfig2', 'inventory_process_name__process_name': 'Grinding'}]
我想要的是,这些进程直接在一个列表中,具体取决于“inventory_number”:
inventory_list = [{'inventory_number': 1211267, 'inventory_name': 'Käfig1', 'inventory_process_name__process_name': ['Turning', 'Grinding', 'Heat Treatment']},
{'inventory_number': 1217729, 'inventory_name': 'Käfig2', 'inventory_process_name__process_name': 'Grinding'}]
这是我的模型:
class Inventory(models.Model):
inventory_number = models.IntegerField(verbose_name="Inventory Number", unique=True)
inventory_name = models.CharField(max_length=100, verbose_name="Inventory Name")
inventory_process_name = models.ManyToManyField(Process, verbose_name="Processes")
inventory_plant = models.ForeignKey(Plant, verbose_name="Plant", on_delete=models.CASCADE)
inventory_product = models.ManyToManyField(TPZProductCluster1, verbose_name="TPZ Product Cluster 1")
inventory_pot_per_shift = models.IntegerField(validators= [MaxValueValidator(600), MinValueValidator(0)], verbose_name="Pot per Shift in min")
inventory_working_weeks_per_year = models.IntegerField(validators= [MaxValueValidator(52), MinValueValidator(0)], verbose_name="Working Weeks per year")
inventory_comments = models.TextField(max_length=1000 ,verbose_name="Comments", blank=True)
inventory_responsible_person = models.ForeignKey(ResponsiblePerson, verbose_name="Responsible Person", on_delete=models.CASCADE)
updated_at = models.DateField(auto_now=True)
class Meta:
ordering = ['inventory_number']
verbose_name = 'Inventory'
verbose_name_plural = 'Inventories'
def processes(self):
return ', '.join([p.process_name for p in self.inventory_process_name.all()])
def products(self):
return ', '.join([p.pc1_product for p in self.inventory_product.all()])
def __str__(self):
return str(self.inventory_number) + ', ' + self.inventory_name
有没有直接的方法来查询数据,或者我可以在查询之后进行吗?
非常感谢您提前!!!!
解决方案
推荐阅读
- c# - 如何用军事时间进行简单的计算?
- angular - 如何根据 HTTP 响应限制/停止 Angular 应用程序加载
- java - 在邻接矩阵中运行 Dijkstra 算法后线程“主”java.lang.StackOverflowError 中的异常
- spring-integration - jdbc 轮询间隔如何工作?以及如何将调试日志添加到特定的 jdbc 轮询器入站适配器?
- python - 如何打印目录的全部内容,包括子目录、子子目录和文件?
- javascript - 从另一个域请求外部脚本
- jq - 如何使用 JQ 过滤具有最近对象键的 JSON 文件?
- python - Pandas:为元素列表的数据框赋值(如果存在)
- excel - 如何在excel中将带有附件的电子邮件发送到gmail
- node.js - 猫鼬中的复合类型