0

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

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

所以我的想法是有一个复选框Dropdown Menu,每当用户设置它时True,下拉菜单下“嵌套”的所有可用页面的列表将在其下方自动启用。
我正在附加管理页面,就像今天一样,管理字段。.


应用程序 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"]

管理员.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)
4

1 回答 1

0

解决了。我只需要知道如何使用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}
于 2020-03-10T13:39:01.587 回答