Django 从 m2m 和外键获取字段

问题描述

我正在向我的 django 应用程序添加功能,以添加链接到具有 M2M 字段的另一个(作业)的模型(批次)。

问题:
我正在使用 Django 自动完成灯在表单中添加这个模型(批次),我希望这个字段也能被输入和另一个自动完成字段(合同)过滤,这个字段是一个名为合同的对象,它与M2M领域:

关系:
{Lot}--M2M 上的反向--{Job}--外键--{合同}

我正在尝试将自动完成中的批次过滤为仅订单上的合同密钥与表单中的字段匹配的那些,我查看了文档,但不确定是否有任何方法可以执行此操作,以下是我的最新尝试以及相关代码

models.py(仅用于关系的字段)

class Contract(Parent_model):
    contract_id = models.IntegerField(null=False,default=0000)


class Job(Job_parent):
    contract = models.ForeignKey(Contract,on_delete=models.CASCADE)


class Lot(Job_parent):
    CO = models.ManyToManyField(Job,related_name='Lot') 

基于类的自动完成视图(views.py)

class lot_auto_complete(autocomplete.Select2QuerySetView):
    def get_queryset(self):

        qs = Lot.objects.all()

        contract_in = self.forwarded.get('contract',None)

        if contract:
            query_set = qs.filter(CO_set.first().contract=contract_in)
        if self.q:
            query_set = qs.filter(lot_number__icontains=self.q)

        return query_set

解决方法

别误会我对 Django 自动完成灯不熟悉。不过好像你的代码有点不对劲。我认为您只需执行以下操作即可获得您想要的:

# Just change your query
query_set = qs.objects.filter(CO__contract__contract_id__in=contract_in)

如果 contract_in 列表仅包含 ID。如果它包含合同对象的列表,那么它看起来像

query_set = qs.objects.filter(CO__contract__in=contract_in)