2017-03-26 32 views
1

我想創建一個圖像網站與類似的形式添加帖子Imgur。一個帖子應該由無限制構成完成的博客帖子的各種類型的塊(文本,圖像,視頻)的數量。帖子由塊(文字,圖像,視頻)

用戶選擇要啓動哪個塊(可能上傳圖像),然後通過單擊按鈕添加另一個塊。

我找不出一個合理的模塊來組成一個帖子。

這是我的Post模型:

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="") 

我不知道我是否應該定義文本塊,imageblock和videoblock獨立的模型(所有ForeignKey的發佈與模型)或是否有更好的解決方案。

我想到了一個通用模型,它可以存儲用於每個塊類型的TextField(用於用戶寫入的文本)和FileField(用於圖像和視頻上載),但每個記錄中的一個字段總是空的(用戶只能寫文本或每塊上傳文件),這看起來像是「浪費空間」。

我很感謝解決這個問題的任何想法。

+0

你是對的。您需要爲文本文章,圖片,文件或其他任何您需要的文件提供多種模型。他們都應該有一個郵政和一個訂單字段的FK。就像這裏的例子:https://www.mitsubishi-motors.com.au/blog/8-essentials-prepare-awesome-couples-road-trip/每個博客文章是不同類型塊的組合。 –

+0

感謝您的安慰!我發現它在Mistsubishi的網站上非常漂亮。還有一個問題 - 據我所知,我應該在Django中使用Formsets來創建和處理完成的帖子,並且(JS + AJAX)添加額外的塊。我在正確的軌道上嗎? – leszcz

回答

0

如果有人遇到類似問題,我選擇了一個帶有許多字段的通用內容塊設計(有些根據塊類型爲空,例如媒體在添加文本塊時爲空)。對我來說,實現並稍後添加必要的JS更容易,以便將更多PostBlocks動態添加到Post。

相關機型:

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) 

一個可以有很多PostBlocks根據您的需要。