2015-06-07 34 views
0

我需要限制在Django Admin窗體中的選擇,但不能提出解決方案。鑑於這些機型:如何在OneToOneField的Django Admin的limit_choices_to選項中填充值?

class ProductFamily(models.Model): 
    name = models.CharField(max_length=250) 
    default_product_to_display = models.OneToOneField('Product', limit_choices_to={'product_family': ??????}) 
    # Enclosing Product reference in quotes is necessary since the Product declaration is below ProductFamily declaration 

class Product(models.Model): 
    name = models.CharField(max_length=250) 
    image = models.ImageField(upload_to='images/',blank=True,null=True) 
    product_family = models.ForeignKey(ProductFamily) 

我應該在課堂ProductFamily放在??????的?我已經嘗試過所有我能想到的內容,包括名稱,'名稱'ProductFamily,'產品系列',self,self.id.自帶選項返回內部服務器錯誤。引用的選項返回:'int()'的無效文字。當「姓名」未加引號使用時,將返回: int()參數必須是字符串或數字,而不是'CharField'。
如果我把一個硬編碼的整數值來測試它,那麼它工作正常,所以它顯然尋找一個整數值。 我也嘗試過,沒有成功,將 id = models.AutoField(primary_key = True) 放在??????中的id聲明中,並且定義了一個返回self.id的函數,但這些都不起作用。

那麼 - 如何通過僅顯示那些product_family id與當前ProductFamily匹配的產品來限制產品的選擇?

回答

0

執行此操作的最佳方法是使用自定義表單來限制字段的查詢集,因爲嘗試動態設置limit_choices_to是非常困難的(如果不是完全不切實際的話)。

例子:

class ProductFamilyForm(forms.ModelForm): 

    def __init__(self *args, **kwargs): 
     if 'initial' in kwargs: 
      self.fields['default_product_to_display'].queryset = Product.objects.filter(
       product_family=initial.product_family) 
+0

非常感謝。這幾乎得到它,但「initial.product_family」沒有工作。下面是最終的工作: '類ProductFamilyForm(forms.ModelForm): 高清__init __(自我,* ARGS,** kwargs): 超(ProductFamilyForm,個體經營).__的init __(* ARGS,** kwargs) 自我點域[ 'default_product_to_display']查詢集= Product.objects.filter(product_family = self.instance.pk) 類ProductFamilyAdmin(admin.ModelAdmin): 形式= ProductFamilyForm list_display =( '編號', '姓名' ,'category','default_product_to_display',) list_filter =('category',)' – user1742628

+0

當然不是:)這是一個僞代碼示例,爲您提供您自己的價值。 – Brandon

相關問題