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}