是否可以将一个模型插入另一个模型?

问题描述 投票:0回答:1

我的模型很少。假设在home.html中,我正在使用Page模型通过管理面板创建简单的页面结构。现在,我想添加并在页面内显示多个画廊。我该怎么做?画廊模型是否可以包含内部页面模型(在我的管理面板中)字段?

class Page(models.Model):

    title = models.CharField(max_length=254)
    slug = models.SlugField(unique=True)
    is_active = models.BooleanField(efault=True)
    display_order = models.IntegerField(default=1)
    meta_title = models.CharField(max_length=100, null=True, blank=True)
    meta_description = models.TextField(null=True, blank=True)
    content = RichTextUploadingField(null=True, blank=True)
    created = models.DateTimeField(auto_now_add=True)
    objects = models.Manager()

    class Meta:
        verbose_name  = 'Home page'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.title

class Gallery(models.Model):

    title = models.CharField(max_length=100)
    img = OptimizedImageField(upload_to='gallery')
    display = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)
    objects = models.Manager()

    class Meta:
        verbose_name = 'Gallery'
        verbose_name_plural = verbose_name

    def __str__(self):
        return f'{self.id} {self.title}'

admin panel visualization

django django-models
1个回答
0
投票

您可以使用ManyToManyField在Page模型与Gallery模型之间创建关系。这样您的Pages可以有多个Galleries,并且您的Galleries已链接到多个Pages。它将像:

class Gallery(models.Model):

    title = models.CharField(max_length=100)
    img = OptimizedImageField(upload_to='gallery')
    display = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)
    objects = models.Manager()

    class Meta:
        verbose_name = 'Gallery'
        verbose_name_plural = verbose_name

    def __str__(self):
        return f'{self.id} {self.title}'


class Page(models.Model):

    title = models.CharField(max_length=254)
    slug = models.SlugField(unique=True)
    is_active = models.BooleanField(efault=True)
    display_order = models.IntegerField(default=1)
    meta_title = models.CharField(max_length=100, null=True, blank=True)
    meta_description = models.TextField(null=True, blank=True)
    content = RichTextUploadingField(null=True, blank=True)
    created = models.DateTimeField(auto_now_add=True)

    galleries = model.ManyToManyField(Gallery, related_name='pages')

    objects = models.Manager()

    class Meta:
        verbose_name  = 'Home page'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.title

然后在代码中,如果要在页面中添加图库,只需:page.galleries.add(gallery)

您提到了Django Admin页面,filter_horizontal也可能要看一眼。

有了这个,在您的管理页面上,当您选择一个页面时,将看到一个块,可让您选择要在该页面中显示哪个图库。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.