Django 从 m2m 和外键获取字段

Django get field from m2m and foreign key

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

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

关系:
{Lot}--在 M2M 上反转--{Job}--外键--{Contract}

我正在尝试将自动完成中的批次过滤为仅那些订单上的合同密钥与表单中的字段匹配的批次,我已经查看了文档但我不确定是否有办法这样做,下面是我的最新尝试以及相关代码。

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') 

自动完成 class 基于视图 (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 autocomplete light。但是您的代码似乎有点错误。我想你可以通过这样做得到你想要的:

# 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)