1

這裏是模型。我需要避免FilterValue模型中的Filter對象引用,這些引用在FilterValue模型中已經被引用。如何定義引用它自己的模型的django外鍵limit_choices_to約束?

class Filter(models.Model): 
     name = models.CharField('Name', max_length=255) 

    class FilterValue(models.Model): 
     name = models.CharField('Name', max_length=255) 
     filter = models.ForeignKey(Filter, limit_choices_to=Q(***?***)) 

我在尋找什麼可能是可能的替代

+0

所以你想設置一個Filter到FilterValue並保存模型,而不是在列表中看到它?這種解決方案的目的是什麼? – Tisho

+0

不要添加重複的條目。 – Babu

+0

也許我不明白,但我認爲這不是正確的做法... – Tisho

回答

1

做到這一點在管理當我從OP的評論理解,這個想法是禁止添加重複的條目。

但有這樣做的更安全的方式:

class FilterValue(models.Model): 
    name = models.CharField('Name', max_length=255) 
    filter = models.ForeignKey(Filter) 

    class Meta: 
     unique_together = (("name", "filter"),) 

原來的解決方案將在管理的形式只是顯示的過濾器的列表,但實際上並不會禁止添加重複編程。

0

我通過使FilterValueAdmin編輯只有在管理和添加一樣內嵌在FilterAdmin模型做了它的另一種方式。

class FilterValueInline(admin.StackedInline): 
    formset = FilterValueInlineFormset 
    model = FilterValue 
    max_num = 1 
    can_delete = False 


class FilterAdmin(admin.ModelAdmin): 
    list_display = ('id', 'name') 
    inlines = [FilterValueInline] 


class FilterValueAdmin(admin.ModelAdmin): 
    """Filter value has to be added via the filter table""" 
    def has_add_permission(self, request): 
     return False 
    def has_delete_permission(self, request, obj=None): 
     return False 
    actions = None 
    list_display = ('id', 'name', 'filter')