@bituke

Как правильно спроектировать базу данных через ORM Django?

Есть модель вопроса:
class Question(models.Model):
	title = models.CharField(max_length=255,)
	text = models.TextField()
	author = models.ForeignKey(User, 
							on_delete=models.CASCADE, 
							related_name='author')

Есть модель ответа на вопрос (все то же самое)

Есть модели для контента вопроса (видео, текст, аудио):
class Content(models.Model):
    question = models.ForeignKey(Question,
                               related_name='question',
                               on_delete=models.CASCADE)
    content_type = models.ForeignKey(ContentType,
                                     limit_choices_to={'model__in':('text',
                                                                    'video',
                                                                    'image',
                                                                    'file')},
                                     on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    item = GenericForeignKey('content_type', 'object_id')
    order = OrderField(blank=True, for_fields=['question'])

    class Meta:
            ordering = ['order']

class ItemBase(models.Model):
	question = models.ForeignKey(Question, on_delete=models.CASCADE)
    title = models.CharField(max_length=250, blank=True)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True

    def __str__(self):
        return self.title

class Text(ItemBase):
	content = models.TextField()

class File(ItemBase):
	file = models.FileField(upload_to='files')

class Image(ItemBase):
	file = models.FileField(upload_to='images')

class Video(ItemBase):
	url = models.URLField()


Обратите внимание на то, что такая модель относится только к модели вопроса. Как можно сделать модель контента "абстрактной"? Что бы ее можно было подключить и к модели вопроса, и к модели ответа, и к тысячи другим моделям, что бы подключалась она быстро и не требовалось под каждую модель ее переписывать. Спасибо!
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы