Здравствуйте, при разработке сайта на Django(что впрочем не так важно) возник вопрос по организации базы данных, как её сделать лучше и правильнее.
Сейчас есть примерно такая модель:
class Author(models.Model):
name = models.CharField(max_length=200, null=True)
class Series(models.Model):
name = models.CharField(max_length=200)
desc = models.TextField(blank=True, null=True)
class Book(models.Model):
title = models.CharField(max_length=400)
ru_desc = models.TextField(null=True, blank=True)
en_desc = models.TextField(null=True, blank=True)
num_series = models.PositiveIntegerField()
series = models.ManyToManyField(Series, blank=True, null=True)
author = models.ManyToManyField(Author)
И есть непреодолимое желание сделать так, чтобы поля title, ru_desc, en_desc могли редактироваться с премодерацией(чтобы у модератора была возможность принять или отменить правку) + чтобы был лог изменений с возможностью отката на прошлые версии(примерно как на википедии, только с премодерацией а не постподерацией)
я так понимаю, что для этого каждому полю в таблице Book требуется создать по своей таблице с ForeignKey на Book?
т.е. сделать что-то подобное этому:
class Book(models.Model):
series = models.ManyToManyField(Series, blank=True, null=True)
author = models.ManyToManyField(Author)
num_series = models.PositiveIntegerField()
class Title(models.Model):
title = models.CharField(max_length=400)
activ = models.models.BooleanField(default=False)
book = models.ForeignKey(Book)
create_time = models.DateTimeField(u'Дата публикации', default=timezone.now(), blank=True)
class RuDesc(models.Model):
desc = models.TextField()
activ = models.models.BooleanField(default=False)
book = models.ForeignKey(Book)
create_time = models.DateTimeField(u'Дата публикации', default=timezone.now(), blank=True)
class EnDesc(models.Model):
desc = models.TextField()
activ = models.models.BooleanField(default=False)
book = models.ForeignKey(Book)
create_time = models.DateTimeField(u'Дата публикации', default=timezone.now(), blank=True)
Правильно ли будет сделать именно так или есть какие-то другие способы о которых я просто не догадываюсь?