Python 是否可以将forms.ManyToManyField中的对象过滤为与另一个字段中选定的值相等?
我想在ManyToManyField上设置查询集,以获取ForeignKey等于另一个formfield中设置的ForeignKey的所有对象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'].
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)
让我知道它是否有效:)