Django ORM запрос с полями, определяемыми пользователем
Я пытаюсь создать запрос Django ORM, чтобы заменить очень грязный необработанный SQL запрос, который я написал в прошлом, но я не уверен, что Django ORM может позволить мне это сделать. У меня есть три таблицы:
Я надеюсь, что смогу сделать с помощью ORM создание вывода, как если бы я запросил одну единственную таблицу следующим образом:
Возможно ли такое с помощью ORM?
РЕДАКТИРОВАНИЕ:
Моделями являются:
class Contact(models.Model):
company = models.ForeignKey(Company, on_delete=models.PROTECT, null=True, blank=True)
class CustomField(models.Model):
name = models.CharField(max_length=100)
company = models.ForeignKey(Company, on_delete=models.PROTECT, null=False, blank=False)
class ContactCustomFieldValue(models.Model):
custom_field = models.ForeignKey(CustomField, on_delete=models.PROTECT, related_name='contact_values')
contact = models.ForeignKey(Contact, on_delete=models.PROTECT, related_name='custom_field_values', null=True)
value = models.TextField(null=True)
Решили эту проблему во многом благодаря Кену с форумов Django.
Решение, которое он предоставил, выглядело следующим образом:
subquery1 = Subquery(ContactCustomFieldValue.objects.filter(contact=OuterRef('id'), custom_field_id=1).values_list('value'))
subquery2 = ...
subquery3 = ...
subquery4 = ...
contact_list = Contact.objects.filter(...).annotate(field1=subquery1, ...)
Я доработал его под свои нужды, но в качестве отправной точки он был идеален