Django.admin - 如果其他字段为 == False,如何禁用模型字段
Django.admin - How to make a Modelfield disable if other field is == False
我是 Django 的新手,我正在开发一个网站,我需要在其中通过 Django 管理平台自动创建新页面。因此,如果 display
参数设置为 True
.
,则想法是在站点的主菜单上创建一个新选项卡
但是我想让用户选择创建一个像这样的下拉菜单,
Dropdown menu.
所以我的想法是有一个复选框 Dropdown Menu
,每当用户设置它时 True
,将自动启用下拉菜单下“嵌套”的所有可用页面的列表在它下面。
我附上今天的管理页面,Admin fields.。
models.py 应用 creat_pages
class CreatePage(models.Model):
name = models.CharField("Nome", max_length=100)
slug = models.SlugField("Atalho")
tittle = models.CharField("Título", max_length=100)
description = models.TextField("Descrição", blank=True)
body = models.TextField("Corpo", blank=True)
display = models.BooleanField("Mostrar no Site", default=False)
dropdown_menu = models.BooleanField("Dropdown Menu", default=False)
dropdown_options = models.ForeignKey("self", null=True, related_name='dropdown',
on_delete=models.CASCADE)
created_at = models.DateTimeField("Criado em", auto_now_add=True)
updated_at = models.DateTimeField("Última alteração", auto_now=True)
objects = models.Manager()
def __str__(self):
return self.name
def get_absolute_url(self):
from django.urls import reverse
return reverse("create_pages:detail", kwargs={"slug": self.slug})
class Meta:
verbose_name = "Criar Página"
verbose_name_plural = "Criar Paginas"
ordering = ["-name"]
Admin.py:
class CreatePageAdmin(admin.ModelAdmin):
list_display = ["name", "slug", "tittle", "display", "created_at"]
search_fields = ["name", "slug", "tittle"]
prepopulated_fields = {"slug": ("name",)}
admin.site.register(CreatePage, CreatePageAdmin)
解决了。我只需要知道如何使用 Foreignkey
。在我了解到它非常简单之后:
我创建了一个 context_processor.py
来过滤所有具有 display = True
的页面,并使它们可用于我所有模板的上下文。这样我就可以很容易地渲染页面。
from .models import CreatePage
def new_page(request):
display = CreatePage.objects.filter(dropdown__isnull=True, display=True)
return {"display": display}
我是 Django 的新手,我正在开发一个网站,我需要在其中通过 Django 管理平台自动创建新页面。因此,如果 display
参数设置为 True
.
但是我想让用户选择创建一个像这样的下拉菜单, Dropdown menu.
所以我的想法是有一个复选框 Dropdown Menu
,每当用户设置它时 True
,将自动启用下拉菜单下“嵌套”的所有可用页面的列表在它下面。
我附上今天的管理页面,Admin fields.。
models.py 应用 creat_pages
class CreatePage(models.Model):
name = models.CharField("Nome", max_length=100)
slug = models.SlugField("Atalho")
tittle = models.CharField("Título", max_length=100)
description = models.TextField("Descrição", blank=True)
body = models.TextField("Corpo", blank=True)
display = models.BooleanField("Mostrar no Site", default=False)
dropdown_menu = models.BooleanField("Dropdown Menu", default=False)
dropdown_options = models.ForeignKey("self", null=True, related_name='dropdown',
on_delete=models.CASCADE)
created_at = models.DateTimeField("Criado em", auto_now_add=True)
updated_at = models.DateTimeField("Última alteração", auto_now=True)
objects = models.Manager()
def __str__(self):
return self.name
def get_absolute_url(self):
from django.urls import reverse
return reverse("create_pages:detail", kwargs={"slug": self.slug})
class Meta:
verbose_name = "Criar Página"
verbose_name_plural = "Criar Paginas"
ordering = ["-name"]
Admin.py:
class CreatePageAdmin(admin.ModelAdmin):
list_display = ["name", "slug", "tittle", "display", "created_at"]
search_fields = ["name", "slug", "tittle"]
prepopulated_fields = {"slug": ("name",)}
admin.site.register(CreatePage, CreatePageAdmin)
解决了。我只需要知道如何使用 Foreignkey
。在我了解到它非常简单之后:
我创建了一个 context_processor.py
来过滤所有具有 display = True
的页面,并使它们可用于我所有模板的上下文。这样我就可以很容易地渲染页面。
from .models import CreatePage
def new_page(request):
display = CreatePage.objects.filter(dropdown__isnull=True, display=True)
return {"display": display}