Django RF update_or_create

时间:2018-01-27 12:25:21

标签: django rest django-rest-framework

我正在尝试更新或创建以下模型:

class Profile(models.Model):
user = models.OneToOneField(AUTH_USER_MODEL, on_delete=models.CASCADE)
canMakeEvent = models.BooleanField(default=False)

使用序列化程序:

class ProfileSerializer(serializers.ModelSerializer):
class Meta:
  model = Profile
  fields = '__all__'

并查看:

def post(self, request):
    answer, created = Profile.objects.update_or_create(
    user=request.user, canMakeEvent = request.data['canMakeEvent'])
    return Response()

我理解响应不正确但是update_or_create的代码主要是我担心的。控制台输出以下内容:

UNIQUE约束失败:event_profile.user_id

1 个答案:

答案 0 :(得分:0)

您需要添加defaults参数才能仅通过user_id执行搜索,而不是通过(user_id,canMakeEdit)的组合执行搜索:

answer, created = Profile.objects.update_or_create(
user=request.user, defaults={'canMakeEvent': request.data['canMakeEvent']})

这将允许更新所选用户的现有配置文件(如果存在),否则创建新用户。