Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 由块组成的帖子(文本、图像、视频)_Django_Django Models - Fatal编程技术网

Django 由块组成的帖子(文本、图像、视频)

Django 由块组成的帖子(文本、图像、视频),django,django-models,Django,Django Models,我正在尝试创建一个图像站点,它的表单与在Imgur上添加帖子的表单类似。一篇文章应该由无限数量的不同类型的块(文本、图像、视频)组成,以创建完成的博客文章 用户选择要启动的块(可能上载图像),然后单击按钮添加另一个块 我想不出一个合理的模块模型来组成一篇文章 这是我的帖子模型: class Post(models.Model): author = models.ForeignKey('auth.User') text = models.TextField() #just a placeholde

我正在尝试创建一个图像站点,它的表单与在Imgur上添加帖子的表单类似。一篇文章应该由无限数量的不同类型的块(文本、图像、视频)组成,以创建完成的博客文章

用户选择要启动的块(可能上载图像),然后单击按钮添加另一个块

我想不出一个合理的模块模型来组成一篇文章

这是我的帖子模型:

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)来添加额外的块。我走对了吗?