Первая попытка модельки

This commit is contained in:
ack_ik
2026-02-10 13:40:12 +03:00
parent 8c38cb68c4
commit b27c685eb1
10 changed files with 285 additions and 0 deletions

58
.ignore/views.py Normal file
View File

@@ -0,0 +1,58 @@
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}"