Использование данных пути url для предварительной загрузки полей в моем шаблоне HTML

Коротко о моем проекте: Я работаю над приложением для рабочих заказов. Рабочий заказ состоит из нескольких различных моментов, называемых операциями. Каждый рабочий заказ имеет различные операции в зависимости от типа выполняемой работы. Для каждой операции вы можете сообщать о своем рабочем времени в виде экземпляров. Таким образом, чтобы запустить новый экземпляр, необходимо определить заказ, операцию, пользователя и время начала. В базе данных будет несколько тысяч рабочих заказов, и каждый из них будет иметь 3-10 различных операций. Поэтому для упрощения запуска (а затем и остановки) экземпляра работы у меня возникла идея попытаться использовать url для наряда на работу, а затем использовать наряд на работу для фильтрации набора операций в запросе. Но с моими ограниченными знаниями я застрял. Я искал подсказки и пробовал различные решения уже несколько дней. Я смог решить эту проблему с помощью динамической фильтрации AJAX, но я хотел узнать, есть ли способ решить ее на этапе рендеринга страницы.

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

Мой models.py

from django.db import models
from django.urls import reverse

#Work Orders
class Workorders(models.Model):
    wo_num = models.CharField(max_length=30, null=False, unique=False)#work order
    wo_status = models.CharField(max_length=30, null=False, unique=False)#status

    def __str__(self):
        return str(self.wo_num)

class OperAreas(models.Model):
    m_operation =models.CharField(max_length=42,null=True, blank=True)#Operations

#Define Operations for work order
class SelectedOperations(models.Model):
    wo_num = models.ForeignKey(Workorders,on_delete=models.SET_NULL, null=True, blank=True, verbose_name='Work Order')#work order
    wo_operation_num = models.IntegerField(null=True,blank=True, verbose_name='Operation instance') #number indicating order
    wo_operation = models.ForeignKey(OperAreas,on_delete=models.SET_NULL, null=True, blank=True, verbose_name='Operation to perform')#Operations defined for this work order

    def __str__(self):
        return str(self.wo_operation)

#Define time for work order
class WorkOrderOperation(models.Model):
    wo_num = models.ForeignKey(Workorders,on_delete=models.SET_NULL, null=True, blank=True, verbose_name='Work Order') # work order 
    wo_operation = models.ForeignKey(SelectedOperations,on_delete=models.SET_NULL, null=True, blank=True, verbose_name='Operation to perform') # Operation
    wo_tech = models.CharField(max_length=30,blank=True, verbose_name='Technician')
    wo_op_start = models.DateTimeField(null=True, blank=True, verbose_name='Start')
    wo_op_stop = models.DateTimeField(null=True, blank=True, verbose_name='Stop')

    def __str__(self):
        return self.wo_num

Надеюсь, модель дает представление о данных, которые я использую. Для этого у меня есть простая модель форм.

my forms.py

from django import forms
from .models import WorkOrderOperation
 
class Labor_Create(forms.ModelForm):

    class Meta:
        model=WorkOrderOperation
        fields = '__all__'

Мой views.py

from .models import Workorder,OperAreas, WorkOrderOperation, SelectedOperations
from .forms import Labor_Create
from django.views.generic import  CreateView
from django.urls import reverse_lazy
from django.shortcuts import render,redirect, get_object_or_404


class WO_LaborCreate(CreateView):
    template_name = 'OtherCreate.html'
    model = WorkOrderOperation
    form_class = Labor_Create
    success_message = 'Added'

Мой urls.py

from django.urls import path,re_path
from . import views

urlpatterns = [
    re_path(r'^start/labor/(?P<str>[\w-]+)/$', views.WO_LaborCreate.as_view(), name='oa_add_labor'),
]

Вот пример url http://127.0.0.1:8080/start/labor/test-4/, где 'test-4' - номер заказа (wo_num).

Я построил более сложный AJAX-код в моем HTML-шаблоне. но идея здесь была в том, чтобы использовать более простую HTML-структуру с одним 'div'ом на одной странице.

OtherCreate.html

{% block content %}

<table>
    <form action="." method="POST" >
        {% csrf_token %}
        {{ form.as_table}}
        <input type="submit" value="Save" class="btn btn-primary btn-lg">
    </form>
</table>

{% endblock %}

Я пытаюсь решить проблему, чтобы получить строку url 'test-4' в поле 'id_wo_num', когда страница отображается, и отфильтровать мой набор запросов операций, чтобы только те, которые назначены на тот же рабочий заказ, 'wo_num'.

Я протестировал несколько различных установок 'def post' и 'def queryset' в моем файле views.py и не почувствовал, что хоть одна из них приблизила меня к решению. Нужно ли мне делать это в HTML-коде? Или я могу решить эту проблему в forms.py или views.py?

Причина, по которой я ищу способ сделать это в моей модели формы или создать представление, заключается в том, что у меня будет много различных классов моделей, которые я буду связывать с заказом на работу и операцией, и я думаю, что тогда я смогу повторно использовать больше кода.

Я уверен, что эта проблема намного проще, чем кажется из текста. Просто пытаюсь дать тому доброму подошве, который решит мне помочь, как можно больше информации.

Вернуться на верх