我正在为我的django应用程序添加功能,以添加模型(Lot)链接到另一个(Job)与M2M字段。
问题:
我使用Django自动补全光在表单中添加这个模型(Lot),我希望这个字段也被输入和另一个自动补全字段(Contract)过滤,这个字段是一个名为Contract的对象,位于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
不要误会我,我不熟悉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)