【问题标题】:Django get field from m2m and foreign keyDjango 从 m2m 和外键获取字段
【发布时间】:2021-03-10 11:01:59
【问题描述】:

我正在向我的 django 应用程序添加功能,以使用 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') 

基于自动完成类的视图(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

【问题讨论】:

    标签: python django django-autocomplete-light


    【解决方案1】:

    不要误会我的意思,我不熟悉 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)
    

    【讨论】:

    • 进行了一些微调,但效果很好,谢谢!!
    猜你喜欢
    • 2014-12-21
    • 2018-11-18
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2021-08-31
    • 2015-09-29
    • 2019-08-09
    相关资源
    最近更新 更多