【发布时间】:2014-03-13 14:33:20
【问题描述】:
我有以下代码
serializer.py
class ContactSerializer(serializers.ModelSerializer):
def __init__(self, *args, **kwargs):
many = kwargs.pop('many', True)
many = True
super(ContactSerializer, self).__init__(many=many, *args, **kwargs)
class Meta:
model = Contact
def validate(self, attrs):
# Check that the user in contact isn't the same as the parent user
if 'user' in attrs.keys() and 'parent_user' in attrs.keys() and attrs['user']:
if attrs['user'].pk == attrs['parent_user'].pk:
raise serializers.ValidationError("You can't add yourself as a contact")
return attrs
views.py
class ContactViewSet(viewsets.ModelViewSet):
queryset = Contact.objects.all()
serializer_class = ContactSerializer
authentication_classes = (TokenAuthentication,)
permission_classes = (permissions.IsAuthenticated, )
def get_queryset(self):
return Contact.objects.filter(parent_user=self.request.user.pk)
def create(self, request):
if isinstance(request.DATA, list):
for i, contact_data in enumerate(request.DATA):
# Get the user id from the request
request.DATA[i]['parent_user'] = self.request.user.pk
# Check if the contact is aleardy a user
if 'email' in contact_data:
try:
request.DATA[i]['user'] = User.objects.get(email=contact_data['email']).pk
except User.DoesNotExist, e:
pass
return super(ContactViewSet, self).create(request)
现在的问题是,当我在POST 中发送联系人列表时,没有创建任何对象,它只是发送无效对象的错误。例如:
发布
[
{
"first_name": "Eyad",
"last_name": "tttttt",
"email": "eyad@gmail.com"
},
{
"first_name": "Eyad",
"last_name": "mmmmmm",
"email": "eyad2@gmail.com"
}
]
回归
[
{},
{
"non_field_errors": [
"You can't add yourself as a contact"
]
}
]
我怎样才能让这个返回像这样:
[
{
"created": true
},
{
"non_field_errors": [
"You can't add yourself as a contact"
]
}
]
这样,当调用 API 时,会创建有效的对象,而 API 调用者不必再次发送这些对象。
【问题讨论】:
标签: python django django-rest-framework