From c5f0ff4a0f49721971473ce6c0facfc4a1a1ae50 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 7 Sep 2021 14:39:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=80=E6=9C=AF=E6=96=87=E6=A1=A3=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/mtm/serializers.py | 2 +- hb_server/apps/mtm/views.py | 2 +- hb_server/apps/sam/migrations/0001_initial.py | 90 +++++++++++++++++++ hb_server/apps/sam/models.py | 9 +- hb_server/apps/sam/serializers.py | 24 +++++ hb_server/apps/sam/views.py | 20 +++++ hb_server/server/settings.py | 1 + 7 files changed, 141 insertions(+), 7 deletions(-) create mode 100644 hb_server/apps/sam/migrations/0001_initial.py create mode 100644 hb_server/apps/sam/serializers.py diff --git a/hb_server/apps/mtm/serializers.py b/hb_server/apps/mtm/serializers.py index 85d8577..481401f 100644 --- a/hb_server/apps/mtm/serializers.py +++ b/hb_server/apps/mtm/serializers.py @@ -192,7 +192,7 @@ class TechDocListSerializer(serializers.ModelSerializer): file_ = FileSimpleSerializer(source='file', read_only=True) class Meta: model = TechDoc - exclude = ['content'] + exclude = '__all__' class TechDocCreateSerializer(serializers.ModelSerializer): class Meta: diff --git a/hb_server/apps/mtm/views.py b/hb_server/apps/mtm/views.py index a893777..c58ed9f 100644 --- a/hb_server/apps/mtm/views.py +++ b/hb_server/apps/mtm/views.py @@ -188,7 +188,7 @@ class TechDocViewSet(OptimizationMixin, CreateUpdateModelAMixin, ModelViewSet): 技术文件增删改查 """ perms_map = {'*':'*'} - queryset = TechDoc.objects.all() + queryset = TechDoc.objects.select_related('file').all() filterset_fields = ['process', 'product'] search_fields = ['name'] ordering = ['-id'] diff --git a/hb_server/apps/sam/migrations/0001_initial.py b/hb_server/apps/sam/migrations/0001_initial.py new file mode 100644 index 0000000..c389300 --- /dev/null +++ b/hb_server/apps/sam/migrations/0001_initial.py @@ -0,0 +1,90 @@ +# Generated by Django 3.2.6 on 2021-09-07 06:09 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('mtm', '0010_auto_20210907_1111'), + ] + + operations = [ + migrations.CreateModel( + name='Contact', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=100, verbose_name='合同名称')), + ('number', models.CharField(max_length=100, unique=True, verbose_name='合同编号')), + ('amount', models.IntegerField(default=0, verbose_name='合同金额')), + ('sign_date', models.DateField(verbose_name='签订日期')), + ('description', models.CharField(blank=True, max_length=200, null=True, verbose_name='描述')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='contact_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ], + options={ + 'verbose_name': '合同信息', + 'verbose_name_plural': '合同信息', + }, + ), + migrations.CreateModel( + name='Customer', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=50, unique=True, verbose_name='客户名称')), + ('country', models.CharField(blank=True, max_length=20, null=True, verbose_name='所属国家')), + ('address', models.CharField(blank=True, max_length=20, null=True, verbose_name='详细地址')), + ('contact', models.CharField(blank=True, max_length=20, null=True, verbose_name='联系人')), + ('phone', models.CharField(blank=True, max_length=11, null=True, unique=True, verbose_name='联系电话')), + ('description', models.CharField(blank=True, max_length=200, null=True, verbose_name='描述')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='customer_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='customer_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'verbose_name': '客户信息', + 'verbose_name_plural': '客户信息', + }, + ), + migrations.CreateModel( + name='Order', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('number', models.CharField(max_length=100, verbose_name='订单编号')), + ('count', models.IntegerField(default=0, verbose_name='所需数量')), + ('delivery_date', models.DateField(verbose_name='交货日期')), + ('contact', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='sam.contact', verbose_name='所属合同')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='order_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('customer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sam.customer', verbose_name='客户')), + ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mtm.material', verbose_name='所需产品')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='order_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'verbose_name': '订单信息', + 'verbose_name_plural': '订单信息', + }, + ), + migrations.AddField( + model_name='contact', + name='customer', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='contact_customer', to='sam.customer', verbose_name='关联客户'), + ), + migrations.AddField( + model_name='contact', + name='update_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='contact_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'), + ), + ] diff --git a/hb_server/apps/sam/models.py b/hb_server/apps/sam/models.py index e5cdcb0..904101f 100644 --- a/hb_server/apps/sam/models.py +++ b/hb_server/apps/sam/models.py @@ -17,10 +17,9 @@ class Customer(CommonAModel): 客户信息 """ name = models.CharField('客户名称', max_length=50, unique=True) - country = models.CharField('所属国家', max_length=20, blank=True, null=True) address = models.CharField('详细地址', max_length=20, blank=True, null=True) - contact = models.CharField('联系人', max_length=20, blank=True, null=True) - phone = models.CharField('联系电话', max_length=11,unique=True, blank=True, null=True) + contact = models.CharField('联系人', max_length=20) + contact_phone = models.CharField('联系电话', max_length=11, unique=True) description = models.CharField('描述', max_length=200, blank=True, null=True) class Meta: @@ -55,8 +54,8 @@ class Order(CommonAModel): """ number = models.CharField('订单编号', max_length=100) customer = models.ForeignKey(Customer, verbose_name='客户', on_delete=models.CASCADE) - contact = models.ForeignKey(Contact, verbose_name='所属合同', null=True, blank=True) - product = models.ForeignKey(Material, verbose_name='所需产品') + contact = models.ForeignKey(Contact, verbose_name='所属合同', null=True, blank=True, on_delete=models.SET_NULL) + product = models.ForeignKey(Material, verbose_name='所需产品', on_delete=models.CASCADE) count = models.IntegerField('所需数量', default=0) delivery_date = models.DateField('交货日期') class Meta: diff --git a/hb_server/apps/sam/serializers.py b/hb_server/apps/sam/serializers.py new file mode 100644 index 0000000..3580dab --- /dev/null +++ b/hb_server/apps/sam/serializers.py @@ -0,0 +1,24 @@ +from rest_framework import serializers + +from .models import Contact, Customer, Vendor + + +class CustomerSerializer(serializers.ModelSerializer): + class Meta: + model = Customer + fields = '__all__' + +class CustomerCreateUpdateSerializer(serializers.ModelSerializer): + class Meta: + model = Customer + fields = ['name', 'address', 'contact', 'contact_phone', 'description'] + +class ContactSerializer(serializers.ModelSerializer): + class Meta: + model = Contact + fields = '__all__' + +class ContactCreateUpdateSerializer(serializers.ModelSerializer): + class Meta: + model = Contact + fields = ['name', 'number', 'amount', 'customer', 'sign_date', 'description'] \ No newline at end of file diff --git a/hb_server/apps/sam/views.py b/hb_server/apps/sam/views.py index 91ea44a..7164c7f 100644 --- a/hb_server/apps/sam/views.py +++ b/hb_server/apps/sam/views.py @@ -1,3 +1,23 @@ +from apps.sam.serializers import CustomerCreateUpdateSerializer, CustomerSerializer +from apps.sam.models import Customer +from rest_framework.viewsets import ModelViewSet +from apps.system.mixins import CreateUpdateCustomMixin from django.shortcuts import render # Create your views here. +class CustomerViewSet(CreateUpdateCustomMixin, ModelViewSet): + """ + 客户-增删改查 + """ + perms_map = {'*': '*'} + queryset = Customer.objects.all() + serializer_class = CustomerSerializer + search_fields = ['name', 'contact'] + filterset_fields = [] + ordering_fields = ['create_time'] + ordering = ['-create_time'] + + def get_serializer_class(self): + if self.action in ['create', 'update']: + return CustomerCreateUpdateSerializer + return CustomerSerializer diff --git a/hb_server/server/settings.py b/hb_server/server/settings.py index 8e52283..c88922b 100644 --- a/hb_server/server/settings.py +++ b/hb_server/server/settings.py @@ -53,6 +53,7 @@ INSTALLED_APPS = [ 'apps.wf', 'apps.mtm', 'apps.inm', + 'apps.sam' ] MIDDLEWARE = [