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')