在django的www.example.com中使用外键动态过滤器admin.py

edqdpe6u  于 2022-11-26  发布在  Go
关注(0)|答案(1)|浏览(129)

我有一个问题的动态设计的管理。
我希望在选择productType时动态筛选选定的productCategory。
例如,我在models.py(产品类别.对象.筛选器(产品类型=2或1或4 ...(我不能动态))


中手动执行此操作

models.py

class ProductType(models.Model):
    name = models.CharField(max_length=200)
    slug = models.SlugField(max_length=200, unique=True)

class ProductCategory(models.Model):
    productType = models.ForeignKey(ProductType, on_delete=models.CASCADE)
    name = models.CharField(max_length=200)
    slug = models.SlugField(max_length=200, unique=True)

class Product(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    brand = models.ForeignKey(Brand, on_delete=models.CASCADE)
    productType = models.ForeignKey(ProductType, on_delete=models.CASCADE, default=1)
    productCategory = models.ForeignKey(ProductCategory, on_delete=models.CASCADE)

enter code here

admin.py

class ProductForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(ProductForm, self).__init__(*args, **kwargs)
        if self.instance:
            self.fields['productCategory'].queryset = ProductCategory.objects.filter(productType=self.instance.productType.id)

@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    form = ProductForm
dfty9e19

dfty9e191#

我想了很长时间,但还没有解决。但我可以告诉你为什么这是不工作。
问题是self.instance.productType.id为“无,”因为您尚未选择.
试着像这样输入print(),你就会明白为什么它不起作用。

def __init__(self, *args, **kwargs):
    super(ProductForm, self).__init__(*args, **kwargs)
    
    if self.instance:
        print(self.instance.productType.id)
        self.fields['productCategory'].queryset = ProductCategory.objects.filter(productType=self.instance.productType.id)

相关问题