1

У меня есть модель Content. Объекты этой модели должны быть единственными объектами, которые видит пользователь.Соберите отдельные модели в Django

Но объекты должны обрабатывать изображения, видео, статьи и т.д.

Я думаю, что лучшим решением было бы иметь модель для каждого типа контента:

class Image(models.Model): 
    image = ImageField() 

class Article(models.Model): 
    title = CharField(max_length=100) 
    text = TextField() 

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

И содержание будет потом управляться с чем-то вроде

class Content(models.Model): 
    content = ForeignKey(to=?) 

на самом деле Content объект может иметь более чем 1 изображение, видео, статьи и т.д. Так что я думаю, мне нужно будет создать другая модель ContentSet, которая может иметь 1 или несколько изображений, видео или статей.

Преимущества будет, что я могу классифицировать, есть комментарии и т.д. в Content объекта, а не обработки этого во всех моделях Image, Article, Video.

Мне нужен совет, как это сделать. Это хорошая стратегия? Будет ли, вероятно, лучше использовать GenericRelation? Какую модель должна указать мой ForeignKey в моей модели Content?

Надеюсь, моя идея понятна. Я не знаю, какие сайты делают это, поэтому я не могу ссылаться ни на что, чтобы объяснить это лучше.

+0

Похоже, работа для [рамок ContentTypes] (https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes /) и [generic relations] (https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#generic-relations), как вы упомянули. – Ngenator

ответ

1

вы также можете смоделировать эти отношения polymorphicaly

Я начал использовать Джанго-полимоделей еще потому что это очень легкий

https://github.com/charettes/django-polymodels

Вы можете создать содержание суперкласс

class Content(PolymorphicModel): 
    pass  

class Image(Content): 
    pass 

class Article(Content): 
    pass 

и затем получить все подклассы содержания

Content.objects.all().select_subclasses()

Ссылка на документацию, которую я перечислил выше, в значительной степени использует вашу точную проблему в качестве варианта использования, у нее есть лучшие примеры и все связанные с этим обстоятельства. Я использую его в производстве для большого веб-сайта, и это чрезвычайно простой API и до тех пор, пока соединения понятны.

Кроме того, это способ здорово, потому что вы можете обратиться к содержанию в FK и M2M отношений

+0

Будет ли это создавать одни и те же данные как в «Image», так и «Content»? Для меня кажется немного лишним, что все данные, созданные в модели, которая наследует от «Content», будут созданы в этих моделях и в «Content». Что вы думаете об этом? – Jamgreen

+0

Другая проблема возникает, когда вы хотите создать сообщение, содержащее как изображения, так и видео. – Jamgreen

+0

Нет 'Content' и' Image' не будут иметь одинаковых данных, они будут связаны, но поля, которые вы указываете для 'Image', будут сохранены только в вашей модели« Image ». Я не думаю, что ваш второй вопрос - проблема вообще, это одна из вещей, которую решает PolymorhpicModel.Сообщение может ссылаться на «Содержимое», используя одно поле. Если у вас не было полиморфной модели, как бы вы ассоциировали сообщения и контент? Будет ли сообщение иметь поле m2m для каждого типа «Content»? Изображения, статьи и видео? Что бы запрос выглядел liek, чтобы получить весь контент, связанный с сообщением? Использование полиморфного упрощает это – dm03514

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