У меня есть следующая модель:
class TestCase(models.Model):
tc_id = models.CharField(max_length=20)
tc_title = models.CharField(max_length=500)
class TestSteps(models.Model):
ts_case = models.ForeignKey(TestCase, on_delete=models.CASCADE)
ts_seq_no = models.IntegerField(default=1)
ts_instruction = models.CharField(max_length=200)
Я хочу отобразить тестовый пример вместе с соответствующими шагами теста в шаблоне.Для этого я написал два представления, одно не очень хорошее, но работает:
def tc_steps(request, pk):
case = TestCase.objects.filter(id=pk)
steps = TestSteps.objects.filter(ts_case_id=pk).order_by('ts_seq_no')
context = {'case': case, 'steps': steps}
return render(request, 'testman/tc_steps.html', context)
Не очень приятно, потому что мне нужно получить два набора запросов.Лучше иметь это:
def tc_steps(request, pk):
case = TestCase.objects.filter(id=pk)
return render(request, 'testman/tc_steps.html', {'case': case})
, потому что он содержит всю информацию, которая мне нужна в шаблоне.Теперь проблема:
В шаблоне для второго представления я использую следующий тег для отображения шагов теста:
{% for step in case.first.teststeps_set.all %}
, который работает, но шаги не в правильном порядке.В шаблоне для первого представления я просто использую:
{% for step in steps %}
и получаю правильный порядок (отсортированный по ts_seq_no), потому что я уже выполнил сортировку в представлении.Я пытался использовать фильтр, но не смог найти тот, который делает то, что я хочу.У меня вопрос, есть ли способ сделать order_by в теге шаблона?