Пользовательский ORM в Django. На основании идентификатора объекта и типа объекта - PullRequest
0 голосов
/ 23 апреля 2020

Моя цель - получить данные из другой модели со ссылкой на тип объекта и идентификатор объекта.

Пример: у меня есть модель клиента и модель адреса

from django.db import models

class Customer(models.Model):
    name = models.CharField(null=False, blank=False, max_length=255)
    email = models.EmailField(null=False, blank=False, unique=True)

class Address(models.Model):
    entity_type = models.CharField(null=False, max_length=255)
    entity_id = models.PositiveIntegerField(null=False)
    address1 = models.CharField(max_length=255)
    address2 = models.CharField(max_length=255)

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

cursor.execute("SELECT * FROM customers AS cust 
     INNER JOIN addresses AS addrs ON 
     (cust.id = addrs.entity_id AND 'customer' = addrs.entity_type) 
     WHERE cust.id IN (%s)", [ids])

Но это не хорошее решение. Займите слишком много времени, когда идентификаторы находятся в диапазоне тысяч.

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

...