首页 > 解决方案 > 发布新记录时如何包含 user_id (foreignKey)?

问题描述

我是 python Django rest-framework 的新手,在创建新地址时遇到了这个问题:

null value in column "user_id" violates not-null constraint
DETAIL:  Failing row contains (21, full name, 123456789, any, any, any, any, any, any, f, null).

这是地址模型:

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


class UserAddress (models.Model):
user = models.ForeignKey(
    User, related_name='addresses', on_delete=models.CASCADE)
full_name = models.TextField(default='')
phone = models.CharField(max_length=30, default='')
city = models.TextField()
province = models.TextField()
street = models.TextField()
description = models.TextField()
postcode = models.CharField(max_length=20)
country = models.CharField(max_length=100)
is_default = models.BooleanField(default=True)

class Meta:
    db_table = 'user_addresses'

这是序列化程序:

from rest_framework import serializers
from user_action.models.address import UserAddress


class UserAddressSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(read_only=True)
class Meta:
    model = UserAddress
    fields = ['id', 'full_name', 'phone', 'city', 'province',
              'street', 'description', 'postcode', 'country', 'is_default']

和 POST 方法:

@api_view(['POST'])
@permission_classes((IsAuthenticated,))
def createUserAddress(request):
user = request.user
if request.method == 'POST':
    serializer = UserAddressSerializer(data=request.data)
    if serializer.is_valid():
        newAddress = serializer.save()
    else:
        return Response(serializer.errors)
return Response(serializer.data)

提前致谢。

标签: djangodjango-modelsdjango-rest-frameworkdjango-serializer

解决方案


发布请求无法保存用户详细信息。尝试将用户实例传递给 serialiser.save() 方法。


推荐阅读