Реклама
30 апреля 2017 г. 22:17

Django - Урок 023. Like Dislike система с помощью GenericForeignKey

РуководствоDjangoDjango, Like, Dislike, GenericForeignKey, GenericRelation1785

В статье по созданию системы закладок на Django был рассмотрен пример с использованием абстрактной модели для нескольких типов закладок, а именно для статей и комментариев к статьям. Также было акцентировано внимание на том, что поля моделей, который имели внешние ключи на различные модели, должны иметь одинаковые названия, чтобы поддерживать возможность создания единого интерфейса для добавления закладок. Это становится возможным благодаря так называемой "утиной типизации" (Duck typing) , которая подразумевает, что объекты, которые не имеют единой иерархии наследования, могут использоваться в одном и том же сценарии при наличии интерфейсов (методов) имеющих одинаковую сигнатуру.

Дословно принцип утиной типизации звучит следующим образом:

Если это выглядит как утка, плавает как утка и крякает как утка, то это, возможно, и есть утка.

If it looks like a duck, swims like a duck and quacks like a duck, then it probably is a duck.

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

В данной же статье рассмотрим вариант, когда для создания системы Like Dislike используется не две различных таблицы для статей и комментариев, и даже не одна, которая будет содержать по внешнему ключу на статью или комментарий (то есть две колонки, и при этом будет заполняться только одна из колонок в зависимости от того, к какому типу контента относится активность пользователя), а одна таблица, которая будет содержать:

  • content_type - тип контента, к которому относится запись
  • object_id - ID записи
  • content_object - генерируемый внешний ключ на запись, по сути объект контента
  • прочие дополнительные поля
Реклама
Последние комментарии
  • EVILEG
  • 23 мая 2017 г. 12:26

Qt/C++ - Урок 005. QSqlRelationalTableModel - Работаем со связными таблицами

В классе DataBase указывается путь к базе данных. В данном случае C:/example/ и т.д. Так вот, у вас есть каталог example ?

  • EVILEG
  • 23 мая 2017 г. 12:19

Qt/C++ - Урок 029. Изображение в базе данных в Qt – Сохранение и Восстановление

Нет. не верно. Ошибка вот в этой строке: QPixmap inixmap = fileName; // Сохраняем его в изображение объекта QPixmap; Выше я показывал, как что нужно путь передавать в качестве аргумент...

Qt/C++ - Урок 029. Изображение в базе данных в Qt – Сохранение и Восстановление

QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "/home", tr("Images (*.png *.xpm *.jpg)")); QPixmap inixmap = fileName; // Сохраняем его в и...

Qt/C++ - Урок 005. QSqlRelationalTableModel - Работаем со связными таблицами

https://www.dropbox.com/sh/vhxcx0iyq0j4578/AACwgWPnZwNqGBndKESiXfFqa?dl=0

  • tetta
  • 22 мая 2017 г. 1:32

Qt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP

Как сделать так, что бы только когда верхнюю полосу зажимаешь, то перетаскивалось окно и что бы оно оставалось на месте?

Сейчас обсуждают на форуме
  • tetta
  • 23 мая 2017 г. 17:59

Создание кнопки "new", "save" и "open". MDI. toolBar

void MainWindow::open(){ QString openFile = QFileDialog::getOpenFileName(this, tr("Open File"), "C:/", ...

Проверка наличия записи в БД при выполнении запроса

Код форм про которые говорил прикрепил. regrdit форма в которой отображается информация отбираемая из базы. editobject форма для редактирования

  • Arrow
  • 23 мая 2017 г. 13:41

qmake

Странно по сообщениям выдает, что у меня компилирутся 32 bit версия (x86 build). Компилятор опознан правильно и в ABI сам определилил x86-windows-msys-pre-64bit и исполняемый файл создае...

WinApi CBTProc

Да всех активных, тоесть через CBT.