首页 > 解决方案 > 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

有没有直接的方法来查询数据,或者我可以在查询之后进行吗?

非常感谢您提前!!!!

标签: pythondjangomany-to-many

解决方案


推荐阅读