Итак, я пытаюсь создать автоматизированный «тиковый лист» в качестве подтверждения концепции для предложения по автоматизации процесса на моем рабочем месте.
На работе мы получаем заказы от различных поставщиков и нам необходимо вручную отметьте все полученные заказы в списке ожидаемых на листе бумаги каждый день.
Я использую обобщенный c DetailView, чтобы иметь отдельную страницу для каждого Розничного продавца и иметь модель, представляющая Розничного продавца с отношениями ManyToMany с Поставщиками. У меня также есть модель Порядка, чтобы «имитировать» соединение с реальной базой данных WMS (с намерением изменить его после получения фактического доступа к БД для чтения, если / когда он будет запущен в производство.)
Мне нужно ожидаемое заказы (в отношении Suppliers ManyToMany) для сопоставления с данными в «реальных» данных модели заказа и возврата ответа о том, существует ли он в БД (таким образом, чтобы я мог отобразить его в шаблоне).
После нескольких попыток Франти c решить ее самостоятельно, я немного озадачен тем, как этого добиться в контексте DetailView, поэтому я боюсь, что что-то неправильно понимаю ...
редактировать: я должен был упомянуть, что мне нужен только «код поставщика» для сопоставления, но я также хотел бы, чтобы программа проверила дубликаты заказов, используя «ссылку на заказ», как только я понял это, так как без этой функциональности все становится немного избыточно ...
Мои модели.py:
from django.db import models
from django.utils import timezone
class Order(models.Model):
''' To simulate connection to main stock db '''
retailer_code = models.CharField(max_length=4)
retailer_name = models.CharField(max_length=100)
supplier_code = models.CharField(max_length=4)
supplier_name = models.CharField(max_length=100)
order_reference = models.CharField(max_length=20)
despatch_date = models.DateTimeField(default=timezone.now)
def __str__(self):
return f"< {self.order_reference}', {self.supplier_name}, {self.retailer_name} >"
# -------------------------------------------------------------------------------------
class Retailer(models.Model):
retailer_code = models.CharField(max_length=4)
retailer_name = models.CharField(max_length=100)
suppliers = models.ManyToManyField('Supplier')
slug = models.SlugField(unique=True, null=True)
def get_supplier_values(self):
return [(suppliers.supplier_code + ' - ' + suppliers.supplier_name) for suppliers in self.suppliers.all()]
def save(self, *args, **kwargs):
self.slug = self.slug or slugify(self.retailer_code)
super().save(*args, **kwargs)
def __str__(self):
return f"< {self.retailer_code} - {self.retailer_name} >"
class Supplier(models.Model):
supplier_code = models.CharField(max_length=4)
supplier_name = models.CharField(max_length=100)
def __str__(self):
return f"< {self.supplier_code}, {self.supplier_name} >"
Мои просмотры.py:
from django.shortcuts import render
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from .models import Retailer, Order
class RetailerListView(ListView):
model = Retailer
context_object_name = 'retailer_list'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = 'Select Retailer'
return context
class RetailerDetailView(DetailView):
model = Retailer
slug_field = 'retailer_code'
slug_url_kwarg = 'retailer_code'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = 'Order Checklist'
context['db_orders'] = Order.objects.filter(retailer_code=self.object.retailer_code)
return context
def do_order_checklist(self):
pass # WIP
Любая помощь будет подтверждена eciated ...