Я работаю над проектом, а также новым в Django. У меня есть sql необработанный запрос с некоторыми объединениями. Но мое требование - сделать Джанго орм. Я пытался сделать это, но не смог сделать точную форму для этого запроса.
Я пытался сделать это для создания django orm, но не нашел точного результата:
model_data = Model.objects.prefetch_related(
'modelapi', 'modelauth', 'modelapiconfig').filter(
modelauth__retrieval_id='XXYY',modelauth__is_active=True).values(
'model_name',
'modelauth__retrieval_id',
'modelapi__api_endpoint_name',
'modelapi__modelapiconfig__api_config')
Вот мои модели.py:
class Model(models.Model):
model_name = models.CharField(max_length=40, blank=False,
verbose_name='Name',
unique=True)
def __str__(self):
return self.model_name
class Meta:
db_table = 'connector_model'
class ModelApi(models.Model):
model_id = models.ForeignKey(Model, on_delete=models.CASCADE,
verbose_name='MODEL Name', related_name='modelapi')
model_description = models.CharField(max_length=150,
verbose_name='API Description')
api_endpoint_name = models.CharField(max_length=100,
blank=False,
verbose_name='API endpoint name', default='')
def __str__(self):
return self.model_id.model_name + "_" + self.api_endpoint_name
class Meta:
db_table = "connector_model_api"
class ModelAuthentication(models.Model):
model_id = models.ForeignKey(Model, on_delete=models.CASCADE,
verbose_name='MODEL Name', related_name='modelauth')
email = models.EmailField(max_length=70)
retrieval_id = models.CharField(max_length=30, blank=False, unique=True)
def __str__(self):
return self.model_id.model_name + "_" + self.retrieval_id
class Meta:
db_table = "connector_model_authentication"
class ModelApiConfig(models.Model):
model_auth = models.ForeignKey(ModelAuthentication, on_delete=models.CASCADE,
verbose_name='MODEL Customer Name')
model_api = models.ForeignKey(ModelApi, on_delete=models.CASCADE,
verbose_name='MODEL API',
related_name='modelapiconfig')
api_config = models.TextField(default={})
def __str__(self):
return self.model_auth.model_id.model_name + str("'s ") \
+ self.model_api.api_endpoint_name + str(" endpoint")
class Meta:
unique_together = ('model_auth', 'model_api',)
db_table = "connector_model_api_config"
И мое требование сделать форму для этого запроса SQL:
SELECT
connector_model.model_name,
connector_model_authentication.retrieval_id,
connector_model_authentication.model_config_data,
connector_model_api.api_endpoint_name,
connector_model_api_config.api_config
FROM connector_model
JOIN
connector_model_authentication ON (connector_model.id = connector_model_authentication.model_id_id)
LEFT OUTER JOIN
connector_model_api ON (connector_model.id = connector_model_api.model_id_id)
LEFT OUTER JOIN
connector_model_api_config ON (
connector_model_api.id = connector_model_api_config.model_api_id
and connector_model_authentication.id = connector_model_api_config.model_auth_id)
WHERE (connector_model_authentication.retrieval_id = 'XXYY'
AND connector_model_authentication.is_active = True);
В левом внешнем соединении файла connector_model_api_config у меня есть два условия в условии ON (), так как я могу добавить два условия в мой запрос django orm?
Пожалуйста, помогите мне, если у кого-нибудь есть решение.