Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以将forms.ManyToManyField中的对象过滤为与另一个字段中选定的值相等?_Python_Django_Python 3.x_Django Forms - Fatal编程技术网

Python 是否可以将forms.ManyToManyField中的对象过滤为与另一个字段中选定的值相等?

Python 是否可以将forms.ManyToManyField中的对象过滤为与另一个字段中选定的值相等?,python,django,python-3.x,django-forms,Python,Django,Python 3.x,Django Forms,我想在ManyToManyField上设置查询集,以获取ForeignKey等于另一个formfield中设置的ForeignKey的所有对象 class ProductAdminForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(ProductAdminForm, self).__init__(*args, **kwargs) self.fields['variants'].

我想在ManyToManyField上设置查询集,以获取ForeignKey等于另一个formfield中设置的ForeignKey的所有对象

class ProductAdminForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(ProductAdminForm, self).__init__(*args, **kwargs)
        self.fields['variants'].queryset = Variant.objects.filter(variantCategory__productCategory__name_single='test')
这样,它会选择所有“Variant”,其中variantCategory中productCategory的“name_single”值等于“test”。我想将“test”替换为productCategory集合的“name_equal”,格式如下

下面是一些代码来说明对象之间的关系

class Variant(models.Model):
    variantCategory = models.ForeignKey('VariantCategory')

class VariantCategory(models.Model):
    productCategory = models.ForeignKey('ProductCategory')

class ProductCategory(models.Model):
    name_single = models.CharField()

这显示了应将productCategory定义为等于的字段

我意识到这很难解释,如果你们需要额外的代码/信息,请告诉我


此外,我只需要查询以获取productCategory等于另一个productCategory的所有对象。“name_equal”部分其实并不重要,可以是对象的id

我认为您应该使用“表单”中的实例

试试这样的

def\uuuu init\uuuu(self,*args,**kwargs):
超级(ProductForm,self)。\uuuuuuuuuuuuuuuuuu初始值(*args,**kwargs)
self.fields['variants'].queryset=Variant.objects.select_related('variantCategory__productCategory').filter(variantCategory__productCategory_id=self.instance.productCategory_id)
如果您添加新产品,此解决方案将不起作用,因为您将没有实例(实例将仅在内存上,而不是数据库上),所以您无法匹配外键。正如你所看到的,我添加了select_related。大声说出一些好的做法

  • 记住使用选择相关的

    Variant.objects.select_related('variantCategory__productCategory').filter(variantCategory__productCategory_id=instance.productCategory_id) 
    
  • 使用model.id安装的model\u id

    Variant.objects.select_related('variantCategory__产品类别').filter(variantCategory__产品类别\u id=instance.productCategory\u id)


如果您只需要查询以获取productCategory等于另一个productCategory的所有对象,请尝试以下操作:

myProductCategory = ProductCategory.objects.last()
Product.objects.filter(productCategory__id=myProductCategory.id)  
让我知道它是否有效:)