我的模型很少。假设在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}'
您可以使用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也可能要看一眼。
有了这个,在您的管理页面上,当您选择一个页面时,将看到一个块,可让您选择要在该页面中显示哪个图库。
希望有帮助!