Django 由块组成的帖子(文本、图像、视频)
我正在尝试创建一个图像站点,它的表单与在Imgur上添加帖子的表单类似。一篇文章应该由无限数量的不同类型的块(文本、图像、视频)组成,以创建完成的博客文章 用户选择要启动的块(可能上载图像),然后单击按钮添加另一个块 我想不出一个合理的模块模型来组成一篇文章 这是我的帖子模型:Django 由块组成的帖子(文本、图像、视频),django,django-models,Django,Django Models,我正在尝试创建一个图像站点,它的表单与在Imgur上添加帖子的表单类似。一篇文章应该由无限数量的不同类型的块(文本、图像、视频)组成,以创建完成的博客文章 用户选择要启动的块(可能上载图像),然后单击按钮添加另一个块 我想不出一个合理的模块模型来组成一篇文章 这是我的帖子模型: class Post(models.Model): author = models.ForeignKey('auth.User') text = models.TextField() #just a placeholde
class Post(models.Model):
author = models.ForeignKey('auth.User')
text = models.TextField() #just a placeholder until blocks work
created_date = models.DateTimeField(
default=timezone.now)
isWaiting = models.BooleanField(default=True)
isLocked = models.BooleanField(default=False)
views = models.IntegerField(default=0)
tags = TaggableManager(help_text="")
我不知道我是否应该为textblock、imageblock和videoblock定义单独的模型(都带有ForeignKey-to-Post模型),或者是否有更好的解决方案
我想到了一个通用模型,它将存储一个文本字段(用于用户编写的文本)和一个文件字段(用于图像和视频上传),用于每个块类型,但每个记录中的一个字段总是空的(用户只能为每个块写文本或上传文件),这看起来像是“浪费空间”
我很欣赏任何解决这个问题的想法。如果有人遇到类似的问题,我会选择一个具有许多字段的通用内容块设计(根据块类型,有些字段是空的,例如添加文本块时媒体是空的)。对我来说,实现和添加必要的JS更容易,以便动态地向Post添加更多postblock 相关型号:
class Post(models.Model):
author = models.ForeignKey('auth.User')
title = models.CharField(max_length=100)
slug = models.SlugField(unique=True)
created_date = models.DateTimeField(default=timezone.now)
views = models.IntegerField(default=0)
tags = TaggableManager(help_text="")
class PostBlock(models.Model):
POST_TYPE_CHOICES = (
('TXT', 'Text'),
('IMG', 'Image'),
('VID', 'Video'),
)
postid = models.ForeignKey('Post', on_delete=models.CASCADE)
text = models.TextField(max_length=1024, blank=True)
media = models.FileField(upload_to=content_path, blank=True, validators=[
validate_file_extension])
contenttype = models.CharField(
max_length=3,
choices=POST_TYPE_CHOICES,
default='IMG',
)
order = models.IntegerField(default=0)
一篇文章可以有你需要的任意多个帖子块。你完全正确。你将需要有几个模型的文字后,图像,文件或任何其他你需要的。所有这些都应该有FK到Post和订单字段。就像这里的例子:每一篇博客文章都是不同类型块的组合。谢谢你的安慰!我看到它在Mistsubishi的网站上运行得很好。还有一个问题——据我所知,我应该在Django中使用Formset来创建和处理完成的文章,并使用(JS+AJAX)来添加额外的块。我走对了吗?