【问题标题】:Django.admin - How to make a Modelfield disable if other field is == FalseDjango.admin - 如果其他字段 == False,如何禁用 Modelfield
【发布时间】:2023-03-15 12:15:01
【问题描述】:

我是 Django 新手,我正在开发一个网站,我需要在其中通过 Django 管理平台自动创建新页面。因此,如果display 参数设置为True,则想法是在站点的主菜单上创建一个新选项卡。

但是我想给用户一个选项来创建一个像这样的下拉菜单, Dropdown menu.

所以我的想法是有一个复选框Dropdown Menu,只要用户将其设置为True,下拉菜单下“嵌套”的所有可用页面的列表将在其下方自动启用。
我现在附上管理页面,Admin fields.


app creat_pages 的models.py

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)

【问题讨论】:

    标签: python django django-models model django-model-field


    【解决方案1】:

    解决了。我只需要知道如何使用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}
    

    【讨论】:

      猜你喜欢
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2019-12-19
      相关资源
      最近更新 更多