我现在给你我的例子,因为它太难解释,好吧,我不知道XD。我有一个名为Step的对象:
class Step(models.Model):
# Intitulé de la question
title = models.CharField(max_length=300)
# Appartenance
belonging = models.ForeignKey('Survey', blank=True, null=True)
# Renvoi à lui-même pour arborescence
parent = models.ForeignKey('self', blank=True, null=True)
# Ordre de la réponse
order = models.PositiveIntegerField(default=0)
# Complément d'information
add_info = models.TextField(blank=True, verbose_name="Additional informations")
def __str__(self):
return (self.title)
def children(self):
return Step.objects.filter(parent=self, belonging=self.belonging).order_by('order', 'title')
def render_step(self):
template = get_template('app_questionnaire/_step.html')
return template.render({'step': self})
我有一步没有父母,只有一步。我只是想知道在添加Step后是否可以在Django管理员中禁用EMPTY父字段?我想在没有父母的情况下添加其他步骤与父级,但不是另一步。我不知道你是否知道我的意思:)。
提前谢谢!
答案 0 :(得分:2)
我并不完全得到你想做的事,但是你可以排除字段或将特定字段声明为只读:
class StepOver(admin.TabularInline):
model = Step
exclude = ['parent']
readonly_fields=('parent', )
答案 1 :(得分:1)
您可以覆盖模型中的保存方法
<强>实施例强>
def save(self):
if Step.objects.count() > 1:
if not self.parent:
print("Error")
else:
super(Step, self).save()
答案 2 :(得分:1)
您可以通过覆盖get_form
中的ModelAdmin
方法来执行此操作:
class StepModelAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
form = super(StepModelAdmin, self).get_form(request, obj, **kwargs)
if Step.objects.count() > 1:
# this will hide the null option for the parent field
form.base_fields['parent'].empty_label = None
return form
答案 3 :(得分:1)
我要感谢@Peter的答案,我只是根据我的问题修改了代码,所以如果有人需要我就给它!
class StepAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
form = super(StepAdmin, self).get_form(request, obj, **kwargs)
if Step.objects.filter(parent__isnull=True).count() > 1:
# this will hide the null option for the parent field
form.base_fields['parent'].empty_label = None
return form