Как создавать и фильтровать связанные объекты модели в приложении django

#django #django-models #django-views #foreign-keys #formset

#django #django-модели #django-представления #внешние ключи #formset

Вопрос:

Я создаю тестовое приложение, и мне нужно выполнить серию тестовых шагов. У меня есть несколько вопросов, связанных с моей заботой.

  1. Когда вы создаете тест, вы выбираете, будет ли это полный или частичный тест. Полный тест будет проходить через все этапы тестирования. Частичный тест сможет проходить отдельным шагом.

Когда создается полный тест, все этапы тестирования должны создаваться по умолчанию.

  1. Как я буду фильтровать этапы тестирования, когда пользователь выбирает частичный тест?

  2. В моем шаблоне подробного тестирования мне нужно ответить на ряд вопросов, которые будут представлять собой формы, отправляющие запросы и получающие ответы от api. Мне интересно, как я могу использовать набор форм или другой способ перехода к следующей форме. Например, шаг 1 — делайте все, что там сказано, нажмите Далее. Следующей будет форма отправки, которая отправит запрос, а следующая форма заполнит шаблон django.

Любая помощь приветствуется.

View.py

 
def create_test(request, id=None):
    form = PrinterTestForm(request.POST or None)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.printer = Printer.objects.get(id=id)
        instance.save()
        # test = Test.objects.get_object_or_404(Test, id=instance.id)
        return redirect(instance.get_absolute_url())
    else:
        test_name = None
        test_type = None
        test = None


    context = {
        "form": form,
    }
    return render(request, "testing/create_test.html", context)

def test_detail(request, id):
    test_instance = get_object_or_404(Test, id=id)
    printer_status_check = printer_check(test_instance)

    stepOne = 
    context = {
        "test": test_instance,
        'printer_status': printer_status_check
    }
    return render(request, "testing/test_detail.html", context)


def printer_check(request):
    device_dns = request.printer.device_dns
    status = get_status_test(device_dns)
    return status


  

models.py

 
TESTCHOICES = (
    ('Full Test', 'full_test'),
    ('Partial Test', 'partial_test')
)

TEST_REGEX = '^[a-zA-Z0-9. -_ ]*$'

class Test(models.Model):
    test_name           = models.CharField(max_length=120, validators=[RegexValidator(regex=TEST_REGEX, message="Only Alphanumeric characters allowed in Test Name", code="invalid_test_name")])
    test_type           = models.CharField(max_length=32, choices=TESTCHOICES, default='Full Test')
    printer             = models.ForeignKey(Printer, on_delete=models.CASCADE)
    timestamp           = models.DateTimeField(auto_now=True)


    def __str__(self):
        return self.test_name

    def get_absolute_url(self):
        return reverse('testing:test_detail', kwargs={'id': self.id })


class TestStep(models.Model):
    test                = models.ForeignKey(Test, on_delete=models.CASCADE)
    test_type_step      = models.CharField(max_length=120, choices=TESTCHOICES)
    test_step_name      = models.CharField(max_length=240)

  

Комментарии:

1. Еще один вопрос, который у меня возникает, заключается в том, прав ли я вообще в том, что TestStep имеет Test в качестве внешнего ключа. Я видел, что у одного человека был вопрошающий и вопрос как у многих ко многим?

2. Могу ли я создать представление шага тестирования для всех шагов тестирования? Или мне придется создавать представление для каждого?

3. Здесь не место для справки по дизайну. Это для кодовых решений.

4. Это приведенный выше код. И я ищу решение для выполнения 17 тестовых шагов с тестом, если выбран полный тест. На мой взгляд, я пытаюсь выяснить, как создать эти шаги тестирования, если при создании объекта тестовой модели выбран параметр полный тест.

5. Вероятно, вам следует создать свой тест в другом файле, а затем вызвать его из вашего представления.