Python 如何将django外键限制定义为引用它的约束';她自己的模型?
这些是模型。我需要避免在FilterValue模型中引用已经在FilterValue模型中引用的Filter对象Python 如何将django外键限制定义为引用它的约束';她自己的模型?,python,django-models,foreign-key-relationship,limit-choices-to,Python,Django Models,Foreign Key Relationship,Limit Choices To,这些是模型。我需要避免在FilterValue模型中引用已经在FilterValue模型中引用的Filter对象 class Filter(models.Model): name = models.CharField('Name', max_length=255) class FilterValue(models.Model): name = models.CharField('Name', max_length=255) fil
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(***?***))
我在寻找什么可以代替?你不能这样做,但你可以作为表单的一部分来做。具体地说,在表单的
\uuuu init\uuu
方法期间,您可以更改相关字段的queryset
我在管理员的中写到了如何做到这一点,正如我从OP的评论中了解到的,这个想法是禁止添加重复条目 但有一种更安全的方法:
class FilterValue(models.Model):
name = models.CharField('Name', max_length=255)
filter = models.ForeignKey(Filter)
class Meta:
unique_together = (("name", "filter"),)
最初的解决方案只是在管理中以表单的形式显示过滤器列表,但实际上并不禁止以编程方式添加副本 我以另一种方式完成了这项工作,即在admin中只编辑filtervaluageadmin并在filteradadmin模型中添加与内联相同的内容
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')
因此,您希望在将筛选器设置为FilterValue并保存模型时,不再在列表中看到它?这种解决方案的目的是什么?不是添加重复条目。也许我不能正确理解它,但我认为这不是正确的方法。。。