2013-09-11 4 views
1

В моем блоге я решил разрешить пользователям редактировать сообщения (я использую Django), но я не уверен, какая правильная реализация для моих моделей для этого. Является ли хорошей идеей использовать наследование нескольких таблиц в качестве моего кода ниже? Я также хочу отслеживать все записи, оригиналы, как и все новые, отредактированные.Как разрешить пользователю редактировать сообщение с помощью Django?

class Post(models.Model): 
    title = models.CharField(max_length=500) 
    text = models.TextField() 
    creation_date = models.DateTimeField(auto_now_add=True) 
    user = models.ForeignKey(User) 

    def __unicode__(self): 
     return "%s %s by %s" % (self.title, self.creation_date, self.user) 

class Edit(Post): 
    edited_date = models.DateTimeField(auto_now_add=True) 
    editor = models.OneToOneField(User) 

    def __unicode__(self): 
     return "%s edited by %s" % (self.convention, self.login) 
+0

не должны включить ваш класс Конвенции – Foon

ответ

1

Что нужно для управления версиями. Есть приложения, которые могут его реализовать. Но если вы хотите сделать это самостоятельно, то ваша модель Edit должна иметь ссылку на модели Post. И должен указывать на конкретный пост, соответствующий автору этого редактирования. Это обязательно означает, что вы должны создавать экземпляр Post каждый раз, когда сообщение сохраняется, и вы должны указывать на этот новый экземпляр из экземпляра Edit.

Что-то вроде этого, но, возможно, потребуется больше работы -

class Post(models.Model): 
    title = models.CharField(max_length=500) 
    text = models.TextField() 
    creation_date = models.DateTimeField(auto_now_add=True) 
    edited_date = models.DateTimeField(auto_now_add=True) 
    author = models.ForeignKey(User) 

    def __unicode__(self): 
     return "%s at %s by %s" % (self.title, self.creation_date, self.author.first_name) 

class Edit(models.Model): 
    creation_date = models.DateTimeField(auto_now_add=True) 
    editor = models.ForeignKey(User) 
    post = models.ForeignKey(Post) 

    def __unicode__(self): 
     return "%s edited by %s" % (self.post.title, self.editor.first_name) 
+0

Спасибо за ваш ответ Bibhas, используя ваше предложение означает, что я должен воссоздать некоторые поля внутри класс Edit (название, текст). нет? Например, это может выглядеть так: правильно? класс 'Edit (models.Model): CREATION_DATE = models.DateTimeField (auto_now_add = True) редактор = models.ForeignKey (Пользователь) пост = models.ForeignKey (Post) название = models.TextField() текст = models.CharField (max_length = 500) def __unicode __ (self): return "% s отредактировано% s"% (self.post.title, self.editor.first_name) ' – Pompeyo

+0

Нет. Вам не нужно , Каждое редактирование указывает на соответствующий объект post, который уже имеет эти поля. –

Смежные вопросы