2013-12-06 2 views
0

Я создал стороннее приложение в своем проекте Django. Модель, о которой идет речь, является моделью тегов. Точно так же, как SO имеет текстовое поле Tag под вопросом, я хочу создать несколько из них. Разные классы, если можете.Последствия расширения/наследования сторонних моделей приложений Django

Пример: College_tag, department_tag, subject_tag и т. Д.

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

Модель «нить», которая также находится в приложении 3 партии имеет manytomany с тэгом.

В результате я требую модель «нить» должна иметь manytomany с College_tag, department_tag, subject_tag

Кроме того, поиск должен быть эффективным. Раньше я мог выполнять поиск по тегам. Теперь я смогу сделать это в колледжах, отделах и предметах.

  1. Как это сделать?
  2. Это необходимо сделать, не касаясь стороннего кода.

ответ

1

Не удалось это работать, чтобы просто сделать другую модель, которая имеет отношение один к одному с Tag? то есть.

from django.db import models 

class TagProfile(models.Model): 
    tag = models.OneToOneField('taggit.tag') 
    # add your custom fields here 

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

ПОЦЕЛУЙ

+0

Я вижу, но рассмотрим случай, когда я предоставил текстовое поле для tag_a. Когда пользователь вводит что-то, следует отображать выпадающие предложения, относящиеся только к tag_a. Аналогичное требование при поиске определенного класса. Разве это не усложнится, если я так сделаю? Спасибо – Nikhil

+0

Я не вижу, как это может быть проблемой. Не могли бы вы уточнить? Может быть, улучшить свой вопрос? Спасибо – jpic

+0

Извините за поздний ответ. Я немного учился и наткнулся на https://docs.djangoproject.com/en/1.5/topics/db/models/#multi-table-inheritance Это также создает отношения один к одному. Могу ли я использовать это? Я могу создать несколько объектов Tag и новые таблицы, а сохранить их так же, как это требование .. – Nikhil

2
from django.db import models 
from YourTagModel import Tag 
from YourThreadModel import Thread 

class College_tag(Tag): 
    pass 
    #all the fields in the model Tag will be inherited 


class Department_tag(Tag): 
    pass 

class MyThreadModel(Thread): 
    College_tag_relation = models.ManyToManyField(College_tag) 
    department_tag_relation = models.ManyToManyField(Department_tag) 

Это создает отношение в вашем отображении базы данных в модели Tag объекты похожи на один к одному полю а. Но django рассматривает его так, как вы ожидали бы наследования для работы

+0

Спасибо! Один момент, о котором я забыл упомянуть, модель Thread также находится в стороннем приложении, поэтому я не могу ее изменить, как показано выше. – Nikhil

+1

Вы можете расширить новый класс MyThreadModel (Thread): вместо потока класса (models.Model): и он должен работать просто отлично – sj7

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