【发布时间】:2019-09-13 11:22:12
【问题描述】:
我正在创建一个 API,我在其中获取一些带有 user_id 字段的数据。如果数据库中存在给定的 user_id,它将更新其余数据,否则它将创建新数据。这是我的代码:
serializers.py
class DataUpdateSerializer(serializers.ModelSerializer):
user_id = serializers.CharField(max_length=250)
email = serializers.EmailField(required=False)
first_name = serializers.CharField(required=False)
last_name = serializers.CharField(required=False)
class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'user_id', 'balance', 'device_id', 'platform')
def create(self, validated_data):
data_update, created = User.objects.update_or_create(user_id=validated_data['user_id'],
defaults={
'first_name': validated_data['first_name'],
'last_name': validated_data['last_name'],
'email': validated_data['email'],
'balance': validated_data['balance'],
'device_id': validated_data['device_id'],
'platform': validated_data['platform'],
}
)
return data_update
views.py
class data_update(APIView):
permission_classes = (Check_API_KEY_Auth,)
def post(self, request):
serializer = DataUpdateSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
username = request.data['user_id']
User.objects.filter(user_id=username).update(username=username)
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_204_NO_CONTENT)
email、first_name 和 last_name 是可选的,在 DB 或序列化程序中可以为空。
Models.py
class User(AbstractUser):
device_id = models.CharField(max_length=250)
balance = models.FloatField()
platform = models.CharField(max_length=250)
user_id = models.CharField(max_length=250, unique=True)
问题:
一切正常,但如果我不传递电子邮件、名字或姓氏,它会给出错误:key_error,如果我为这些字段提供空白值“”,这个给出的错误不能为空白
【问题讨论】:
-
用户模型中的 email、first_name 和 last_name 字段是否有 blank=True?
-
我已经扩展了 django 默认用户模型,我没有对现有字段进行任何更改。
-
你能添加那个模型吗?
-
models.py 添加。请检查
标签: django django-rest-framework