58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
from django.shortcuts import render
|
|
from django.views import View
|
|
from django.http import JsonResponse
|
|
from .models import Part, ProductStructure
|
|
from .filters import PartFilter
|
|
from django.contrib import admin
|
|
from django.db import models
|
|
from django.forms import ModelForm
|
|
from django.utils.html import format_html
|
|
|
|
class PartList(View):
|
|
def get(self, request):
|
|
filter = PartFilter(request.GET, queryset=Part.objects.all())
|
|
return JsonResponse({
|
|
'results': [self.part_to_json(part) for part in filter.qs],
|
|
'filters': filter.filters.items()
|
|
})
|
|
|
|
def part_to_json(self, part):
|
|
return {
|
|
'id': part.id,
|
|
'name': part.name,
|
|
'decimal_number': part.decimal_number,
|
|
'type': part.get_type_display(),
|
|
'thickness': part.thickness,
|
|
'length': part.length,
|
|
'weight': part.weight,
|
|
'cut_length': part.cut_length,
|
|
'number_of_punches': part.number_of_punches,
|
|
'slug': part.slug
|
|
}
|
|
|
|
class PartAdmin(admin.ModelAdmin):
|
|
list_display = ('name', 'decimal_number', 'type', 'thickness', 'weight')
|
|
search_fields = ('name', 'decimal_number')
|
|
list_filter = ('type',)
|
|
|
|
inlines = [
|
|
ProductionOperationInline
|
|
]
|
|
|
|
class ProductionOperationInline(admin.TabularInline):
|
|
model = ProductionOperation
|
|
extra = 1
|
|
|
|
class ProductionOperation(models.Model):
|
|
part = models.ForeignKey(Part, on_delete=models.CASCADE, related_name='operations')
|
|
operation_type = models.CharField(max_length=50, choices=[
|
|
('Лазер', 'Лазер'),
|
|
('Сварка', 'Сварка'),
|
|
('Покраска', 'Покраска'),
|
|
('Обработка', 'Обработка'),
|
|
])
|
|
time = models.FloatField()
|
|
description = models.TextField(blank=True)
|
|
|
|
def __str__(self):
|
|
return f"{self.part.name} - {self.operation_type}" |