forked from erp-dev/erp
110 lines
2.9 KiB
Python
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 # 展开外键关系
|