Как реализовать идею зависимых полей модели в Django? - PullRequest
0 голосов
/ 08 ноября 2019

Я создаю приложение, в котором в качестве моделей используются сообщение и тег

сообщение имеет теги, каждый тег как-то описывает сообщение, например, сообщение имеет следующие теги

#backend_development #coding

и я связываю модель Post с моделью Tag с помощью ManyToManyField

, и каждый создатель сообщения выбирает теги из предварительно заполненного списка из базы данных, то есть они не создают теги для сообщения, онипросто выберите их.

Дело в том, что я пытаюсь как-то классифицировать эти теги, например, чтобы все связанные с технологией теги находились под техническим полем в списке, при нажатии на них отображаются все связанные с технологией теги,например, если это бизнес-поле, оно отображает все связанные с бизнесом теги

, как я могу реализовать эту классификацию? я должен построить другую модель, названную SubjectTag, например, чтобы включить темы всех тегов и связать ее с моделью тегов? я не должен делать это и использовать какую-то магию HTML, которая может сделать этот трюк для меня? Я не знаю, что ты думаешь?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Итак, вы хотите классифицировать теги по типам / предметам.

Предложение 1: Итак, что я сделаю, это что-то, чтобы определить перечисление, например, для доступных предметов:

SUBJECTS = ("Business", "Tech", ...)

Тогда в ваших моделях, как вы сказали, у вас будет модель Post, которая будет иметь M2M для модели Tag. Тогда тег вашей модели может содержать пару полей: name и subject.

  • name будет именем тега, который вы можете использовать для показа клиенту.
  • subject будет типом Enum, где возможны варианты, определенные в SUBJECTS. Например, в Postgresql вы можете определить перечисления, как вы видите здесь . Кроме того, вы также можете оставить его как строковое поле и быть более разрешающим, что затем вы можете добавить свободный текст в поле subject.

Предложение 2: Определите объекты в третьей модели, и тогда ваша модель тегов будет иметь внешний ключ для модели Subject.

С обоими предложениями, приведенными выше, как только вы сможете создать эту структуру, вы всегда сможете отфильтровать / сгруппировать теги по темам и представить их так, как вы хотите, для конечного пользователя.

Плюсы Proposal 2 в том, что вы можете добавлять / удалять объекты наиболее гибким способом. Поэтому я считаю, что это лучший вариант.

0 голосов
/ 08 ноября 2019

Модель TagSubject, связанная с тегами (возможно, многие-ко-многим), представляется наиболее прямым и управляемым способом обработки классификации тегов.

...