1
0
forked from erp-dev/erp
Files
erpnew/api_man/serializers.py

110 lines
2.9 KiB
Python

from rest_framework import serializers
from basic_info import models as basic_models
class BaseSerializer(serializers.ModelSerializer):
merchant = serializers.PrimaryKeyRelatedField(
queryset=basic_models.Merchant.objects.all(),
required=False # 创建时由视图层设置
)
def to_representation(self, instance):
try:
merchant = self.context['request'].user.employee.merchant
if instance.merchant != merchant:
# 数据保护手段
raise PermissionError("无权限访问该对象")
except (KeyError, AttributeError):
# TODO: log something?
raise PermissionError("无权限访问该对象")
result = super().to_representation(instance)
if self.context.get('expand_merchant', False):
result['merchant'] = {
'id': instance.merchant.id,
'name': instance.merchant.name
}
return result
class QuickInputSerializer(serializers.ModelSerializer):
class Meta:
model = basic_models.QuickInput
fields = ['name', 'value', 'group']
class ProductCategorySerializer(BaseSerializer):
class Meta:
model = basic_models.ProductCategory
fields = '__all__'
class ProductSerializer(BaseSerializer):
class Meta:
model = basic_models.Product
fields = '__all__'
def to_representation(self, instance):
result = super().to_representation(instance)
result['category'] = {
'id': instance.category.id,
'name': instance.category.name
}
return result
class WareHouseSerializer(BaseSerializer):
class Meta:
model = basic_models.WareHouse
fields = '__all__'
class SupplierSerializer(BaseSerializer):
class Meta:
model = basic_models.Supplier
fields = '__all__'
class EmployeeSerializer(BaseSerializer):
class Meta:
model = basic_models.Employee
fields = '__all__'
class CustomerSerializer(BaseSerializer):
created_by = serializers.PrimaryKeyRelatedField(
queryset=basic_models.Employee.objects.all(),
required=False,
)
class Meta:
model = basic_models.Customer
fields = '__all__'
class VehicleTypeSerializer(BaseSerializer):
class Meta:
model = basic_models.VehicleType
fields = '__all__'
class BankAccountSerializer(BaseSerializer):
class Meta:
model = basic_models.BankAccount
fields = '__all__'
class DeviceInfoSerializer(BaseSerializer):
class Meta:
model = basic_models.DeviceInfo
fields = '__all__'
class VehicleTransportRecordSerializer(BaseSerializer):
vehicle_type_name = serializers.CharField(source='vehicle_type.name', read_only=True)
class Meta:
model = basic_models.VehicleTransportRecord
fields = '__all__'
depth = 1 # 展开外键关系