Django как связать модели



Дата: 31.08.2017, 11:03 Просмотров: 73351

Представим ситуацию. Есть модель Текст (заголовок, тело, теги) и модели Новость, Продукт, Реклама, которые имеют свои уникальные параметры. Необходимо связать Текст и все остальные - вполне логичное желание.

Как можно поступить:

  • Добавить Foreign Key в Текст (т.е. будет N=3 Foreign Key полей)
  • Сделать отдельные модели для связи - будет 3 таблицы для связки. (вручную их сделаем)
  • Сделать 2 поля, одно из которых django будет говорить, какая модель имеется в виду, а второе – хранить ключ этой модели. + добавить свойство, которое будет возвращать запись из нужной модели (делать нужный query запрос)

Первый вариант не подходит, потому что каждая новая модель будет добавлять еще одну Foreign Key связь Второй не очень, потому что N моделей - N дополнительных таблиц делать руками А вот третий вариант неплохой. Он и реализован в Django и состоит из двух компонентов: Content Types Framework и Generic django как связать модели Relations.

Вот простой пример: реализуем систему тэгов(ярлычков), которая могла бы выглядеть так

from django.db import models from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType class TaggedItem(models.Model): tag = models.SlugField() content_type = models.ForeignKey(ContentType) object_id = models.PositiveIntegerField() content_object = GenericForeignKey('content_type', 'object_id') def __str__(self): # __unicode__ on Python 2 return self.tag

Обычное поле ForeignKey может “указывать” только на одну модель, что означает, - если в модели TaggedItem есть поле ForeignKey, его можно “связать” с одной и только одной моделью, для которой и будут сохраняться тэги. Приложение contenttypes предоставляет нам поле специального типа (GenericForeignKey), которое решает обозначенную выше проблему и позволяет создать связь с любой моделью

Ссылки:


Рекомендуем посмотреть ещё:


Закрыть... [X]


Связать пользователя с моделью Django - Stack Overflow на русском Вязано кожаное платье

модели src="http://habrastorage.org/files/05d/d7c/08d/05dd7c08dde549f1b7627492c2f29c2f.png" alt="Django как связать модели" title="Django как связать модели"> Python - Связать в одном поле 2 модели? - Stack Overflow на русском
Django как связать модели Python-сообщество / Django / связать пользователя и модель
Django как связать модели Django. Меню из разных моделей / Песочница / Хабрахабр
Django как связать модели Полиморфные связи или Foreign Key на две Django модели
Django как связать модели Как связать три таблицы в админке django?
Django как связать модели Модели Документация Django 1.8
Django как связать модели 3D ручка - что это такое и как она работает?
Django как связать модели Cached
Django как связать модели Вышивка лентами - Общие вопросы - Форум
Для женщин Топы и летние Кофты Записи в рубрике дляКак перешить рукава - МехЭксперт: Цена перешить шубуКуклы, связанные крючком. МК и видео дляМастер-класс слип, как сшить слип, шьем слип для. - PinterestНаборы для вышивания бисером - магазин вышивкиО порядке и условиях признания лица инвалидом (с)

Похожие новости


Лучшие статьи


Источник: http://eingedi.ru/django-kak-svyazat-modeli/



Рекомендуем посмотреть ещё:


Закрыть ... [X]

Связать 3 модели Форум Django на русском Декупаж столов идеи

Django как связать модели Django как связать модели Django как связать модели Django как связать модели Django как связать модели Django как связать модели Django как связать модели