Использование данных пути 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?
Причина, по которой я ищу способ сделать это в моей модели формы или создать представление, заключается в том, что у меня будет много различных классов моделей, которые я буду связывать с заказом на работу и операцией, и я думаю, что тогда я смогу повторно использовать больше кода.
Я уверен, что эта проблема намного проще, чем кажется из текста. Просто пытаюсь дать тому доброму подошве, который решит мне помочь, как можно больше информации.