forked from erp-dev/erp
fix: merchant not required at customer create api
This commit is contained in:
@@ -136,6 +136,41 @@ class CustomerSerializer(BaseSerializer):
|
||||
required=False,
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.validators = [
|
||||
validator
|
||||
for validator in self.validators
|
||||
if not (
|
||||
hasattr(validator, 'fields')
|
||||
and tuple(validator.fields) == ('merchant', 'name')
|
||||
)
|
||||
]
|
||||
|
||||
def _get_request_merchant(self):
|
||||
request = self.context.get('request')
|
||||
try:
|
||||
return request.user.employee.merchant
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
def validate(self, attrs):
|
||||
attrs = super().validate(attrs)
|
||||
|
||||
merchant = self._get_request_merchant() or attrs.get('merchant') or getattr(self.instance, 'merchant', None)
|
||||
name = attrs.get('name', getattr(self.instance, 'name', None))
|
||||
|
||||
if merchant and name:
|
||||
queryset = basic_models.Customer.objects.filter(merchant=merchant, name=name)
|
||||
if self.instance is not None:
|
||||
queryset = queryset.exclude(pk=self.instance.pk)
|
||||
if queryset.exists():
|
||||
raise serializers.ValidationError({
|
||||
'name': '该商户下已存在同名客户。'
|
||||
})
|
||||
|
||||
return attrs
|
||||
|
||||
class Meta:
|
||||
model = basic_models.Customer
|
||||
fields = '__all__'
|
||||
|
||||
Reference in New Issue
Block a user