Запрос Django с двумя внешними ключами - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь создать страницу приложения. На этой странице я показываю название приложения. Теперь я хочу показать, если оно существует, приложение DRP.

urls.py:

path('application/<int:application_id>/', views.application, name='application')

Модели такие:

class Application(models.Model):
    application_name = models.CharField(max_length=64)

    def __str__(self):
        return self.application_name


class Drp_Application(models.Model):
    application_prod = models.OneToOneField(Application, related_name='drp_application_prod', on_delete=models.CASCADE)
    application_drp = models.OneToOneField(Application, related_name='drp_application_drp', on_delete=models.CASCADE)

    def __str__(self):
        return str(self.application_prod) + " -> " + str(self.application_drp)

Drp_Application модель содержит связь между производственным приложением и приложением DRP.

Моя текущая рабочая страница выглядит так:

def application(request, application_id):
    application = get_object_or_404(Application, pk=application_id)
    # application_drp = ...
    context = {
        'application': application,
        'application_drp': application_drp
    }
    return render(request, 'application.html', context)

Каким должен быть мой запрос на получение модели приложения DRP от application_id в представлении моей страницы application?

Спасибо за вашу помощь

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

Я нашел способ сделать это, но, возможно, не так хорошо, как это возможно.

application_drp_id = Drp_Application.objects.get(application_prod=application_id)
application_drp = Application.objects.filter(application_name=application_drp_id.application_drp)

Это возможно в одном запросе?

1 Ответ

2 голосов
/ 27 марта 2019

Обновленный ответ

Если соотношение между Application и Drp_Application равно OneToOne, то должен работать следующий способ:

application.drp_application_prod.application_drp

Старый ответ

Вы можете просто сделать это следующим образом (на основе обратное отношение ) (при наличии отношения внешнего ключа):

В views.py (При необходимости)

application.drp_application_prod.all() # to get production apps
application.drp_application_drp.all() # to get drp apps

В шаблоне:

{{ application.drp_application_prod.all }}
{{ application.drp_application_drp.all }}  

// Or just iterate through the list

{% for drp in application.drp_application_prod.all %}
     {{ drp }}
{% endfor %}

Обновление

for drp in application.drp_application_prod.all():
    print(drp.application_drp)

# Or

application.drp_application_prod.values_list('application_drp')  # list queryset
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...