Я пытался создать систему Tutorial, которую мы обычно видим на веб-сайтах. Как те, которые мы нажимаем next -> next -> previous
и т.д., чтобы прочитать.
Все сообщения хранятся в таблице (модель) с именем Post
. В основном как пул почтовых объектов.
Post.objects.all()
вернет все сообщения.
Теперь есть еще один стол (модель)
Tutorial
Это будет хранить следующее,
class Tutorial(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
tutorial_heading = models.CharField(max_length=100)
tutorial_summary = models.CharField(max_length=300)
series = models.CharField(max_length=40) # <---- Here [10,11,12]
...
Здесь записи в этом series
поле - это post_ids, хранящиеся в виде строкового представления списка.
пример: серия будет иметь [10,11,12]
, где 10, 11 и 12 - это post_id, которые соответствуют их соответствующим записям в таблице Post
.
Итак, моя запись в таблице для Tutorial
модели выглядит следующим образом.
id heading summary series
"5" "Series 3 Tutorial" "lorem on ullt consequat." "[12, 13, 14]"
Поэтому я просто прочитал поле series
и получил все сообщения с ids
в этом списке, а затем отобразил их, используя pagination
в Django.
Теперь , я прочитал из нескольких сообщений stackoverflow, что иметь несколько записей в одном поле - плохая идея. И иметь эту связь, чтобы охватить несколько таблиц в качестве отображения, является лучшим вариантом.
То, что я хочу, это возможность вставлять новые посты в эту серию где угодно. Может быть спереди или посередине. Это может быть легко достигнуто, рассматривая эту серию как список и вставляя, как мне угодно. Изменение "[14,12,13]"
изменит порядок отображаемых сообщений.
У меня вопрос: можно ли использовать этот способ хранения нескольких значений в поле для моего варианта использования? Или это займет хит производительности или вообще плохая идея. Если нет, то есть ли способ сохранить или изменить порядок, охватив отношения с помощью другой таблицы, или есть совершенно лучший способ сделать это в Django или MYSQL.