【问题标题】:Django POST violates not-null constraint user_idDjango POST 违反非空约束 user_id
【发布时间】:2018-09-12 00:17:55
【问题描述】:

即使在这里也找不到我的问题的答案。我知道有类似的帖子,但我仍然没有得到它。

我在尝试 POST 到我的“user_profile”时收到错误 下面是错误和我的代码。

django.db.utils.IntegrityError: null value in column "user_id" violates not-null constraint

models.py 有一个来自 django.contrib.auth.models import User 的 foriegnkey

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    user = models.OneToOneField(User, on_delete=True)
    start_date = models.DateTimeField
    last_active_date = models.DateTimeField
    alias_name = models.CharField(max_length=30)
    city = models.CharField(max_length=30)
    state = models.CharField(max_length=30)
    zipcode = models.CharField(max_length=5, null=True)

序列化器.py

from rest_framework import serializers
from api.models import UserProfile

class UserProfileSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    orientation = serializers.CharField(required=False, allow_blank=True, max_length=100)

    def create(self, validated_data):

        return UserProfile.objects.create(**validated_data)

userprofile.py get 工作正常,但帖子通过“违反非空约束”

@csrf_exempt
def user_profile_list(request):
    if request.method == 'GET':
        orientation = UserProfile.objects.all().values()
        list2 = list(orientation)
        return JsonResponse(list2, safe=False)

    elif request.method == 'POST':
        data = JSONParser().parse(request)
        serializer = UserProfileSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, status=201)
        return JsonResponse(serializer.errors, status=400)

【问题讨论】:

  • 你在 POST 请求中发送了什么 data

标签: django django-forms django-rest-framework


【解决方案1】:

你有 read_only=True 所以 id 在 UserProfileSerializer 的 POST 中不可用。 模型序列化程序将为您提供帮助。 docs

【讨论】:

  • 太棒了,效果很好。但是现在我收到了 id "id" 的错误:["This field is required."]
猜你喜欢
  • 2020-11-28
  • 2012-11-01
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
相关资源
最近更新 更多