Django ORM: Я хочу преобразовать сырой запрос в Django ORM [NEED HELP].
В зависимости от типа пользователя, я хочу присоединиться к связанной таблице.
если тип пользователя 'pi' prefetch_related('content_object__stores)
else prefetch_related('content_object__store_set), но объедините оба запроса вместе.
Есть идея преобразовать сырой запрос в Django ORM???
SELECT * FROM user AS u
LEFT JOIN provisioning_company AS c
ON u.company_id = c.id AND u.type != 'pi'
LEFT JOIN provisioning_picker AS p
ON u.company_id = p.id AND u.type = 'pi';
class User(AbstractUser):
content_type = models.ForeignKey(ContentType, on_delete=models.DO_NOTHING, default=None, null=True)
related_id = models.IntegerField(default=None, null=True)
content_object = GenericForeignKey('content_type', 'company_id')
type = models.CharField(max_length=2, choices=user_type_choices)
class Picker(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=128)
email = models.EmailField(max_length=256)
mobile = models.CharField(max_length=16, unique=True)
stores = models.ManyToManyField(
Store,
verbose_name='stores',
blank=True,
help_text="stores",
related_name="picker_set",
related_query_name="picker_set",
db_table="provisioning_picker_store",
)
class Store(CommonModel):
companies = models.ManyToManyField(
Company,
verbose_name='companies',
blank=True,
help_text="companies",
related_name="store_set",
related_query_name="store_set",
db_table="provisioning_company_store_relation",
)
пробовал что-то вроде
User.objects.prefetch_related(
Prefetch("content_object__store_set", queryset=User.objects.exclude("pi"))
).prefetch_related(Prefetch("stores", queryset=User.objects.filter("pi")))
но он не работает как необработанный запрос. Любая помощь будет оценена по достоинству.