Много-ко-многим обратный поиск полей с идентификаторами в Django |Полиморфная модель - PullRequest
0 голосов
/ 10 октября 2019

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

полей url и значений (модель Attr_1 и Attr_2)

из запроса Object1 моделирует «обратный набор» отношения «многие ко многим». Вот мой пример:

models.py:

class Text(models.Model):
    string = models.TextField()

#Entity
class Element(models.Model):
    pageline = models.IntegerField()

class Object1(Element):
    text = models.ManyToManyField(Text)

class Object2(Element):
    another_var = models.ManyToManyField(Text)
    yet_another = models.CharField(max_length=1)

#Entity
class Attribute(models.Model):
    belongsTo = models.ManyToManyField(Element)

class Attr_1(Attribute):
    url = models.URLField()

class Attr_2(Attribute):
    value = models.CharField(max_length=255)
    date = models.URLField()

Если я использую:

>> models.Object1.objects.get(pk=1).attribute_set.all()                                                                    
<QuerySet [<Attribute: Attribute object (1)>, <Attribute: Attribute object (2)>]>

>> models.Object1.objects.get(pk=1).attribute_set.values()                                                                 
<QuerySet [{'id': 1}, {'id': 2}]>

Я думаю, теперь я должен запросить Attr_1 для pk = 1 иAttr_2 для pk = 2?

Имеет ли отношение модель атрибута, чтобы узнать, находится ли id = 1 в модели Attr_1 или Attr_2?

Любая помощь приветствуется. Спасибо!

РЕДАКТИРОВАТЬ:

Интересно, достижимо ли решение с использованием типов содержимого: Модель Django один внешний ключ для многих таблиц У меня естьчитать и понимать технику.

Мне кажется, что django-polymorphic удовлетворяет моим потребностям. Несмотря на то, что я не люблю использовать не встроенные библиотеки и хотел бы узнать решение путем сборки модулей. У меня нет никаких знаний по созданию эффективного набора запросов. Может быть, мое моделирование неверно?

Но с полиморфной моделью я могу запросить:

>> models.Object1.objects.get(pk=1).attribute_set.all()[0].url                                                                                      
'http://www.dot.com'

Мне просто нужно поймать тип объекта, чтобы он не сталкивался:

AttributeError: 'Attribute' object has no attribute 'url'

Надеюсь, что кто-то может помочь или объяснить тему дальше, даже если я нашел что-то, что работает для меня.

...