使用django序列化器发送到数据库



我正在学习django rest框架,我似乎有一个问题与我的ForeignKey模型和序列化器。我有两个模型和两个序列化器

class Clients(models.Model):
client_public_key = models.CharField(max_length=100, default=generate_client_public_key, unique=True)
client_name = models.CharField(max_length=100, unique=True, null=False)
client_name_abbr = models.CharField(max_length=100, unique=True, null=True)
created_by = models.IntegerField(default=1, null=False) #Has to be changed to foreign key
created_at = models.DateTimeField(auto_now_add=True, null=False)
class Meta:
ordering = ["client_name"]
class Users(models.Model):
client = models.ForeignKey(Clients, on_delete=models.CASCADE)
user_public_key = models.CharField(max_length=100, null=False, default=generate_client_public_key, unique=True)
first_name = models.CharField(max_length=100, null=False)
last_name = models.CharField(max_length=100, null=False)
email = models.CharField(max_length=100, null=False, unique=True)
cell = models.IntegerField( null=True)
support_department = models.CharField(max_length=50, null=False)
password = models.CharField(max_length=150, null=False)
user_status = models.IntegerField(null=False)
password_changed = models.IntegerField(default=0, null=False)
last_login = models.DateTimeField(null=True)
created_by = models.IntegerField(default=1, null=False) #Has to be changed to foreign key
created_at = models.DateTimeField(auto_now_add=True, null=False)
class Meta:
ordering = ["first_name"]

序列化器

class ClientSerializer(serializers.ModelSerializer):

class Meta:
model = Clients
fields =  '__all__'
read_only_fields = ('id','client_public_key')

class UserSerializer(serializers.ModelSerializer):
# client = ClientSerializer()
# client = serializers.StringRelatedField()
class Meta:
model = Users
depth = 1
fields = '__all__'
read_only_fields = ('id','user_public_key')
与<<p>发布/strong>
def create_user(request):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
try:
queryset = Users.objects.get(email=serializer.data['email'])
content = {'status_response': 'User Created Successfully'}
return Response(content, status=status.HTTP_201_CREATED)
except Users.DoesNotExist:
content = {'status_response': 'User Not Created'}
return Response(content, status=status.HTTP_404_NOT_FOUND)
content = {'status_response': 'User Already Exist'}
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

问题是当我在UserSerializer中添加depth=1时,我得到(1048, "Column 'client_id'不能为null")发布数据时出错。我做错了什么?

删除depth=1并取消注释

client = ClientSerializer()

会做和depth=1一样的事情。如果您愿意,也可以在这里使用read_only=True

或者如果你用它来创建客户端,在你的Users模型中,使用related_name=users。现在在ClientSerializer中使用

users = UserSerializer(read_only=True)

注意:不要同时使用,否则会导致无限循环。

不要在模型名称中使用复数名称。尽量遵循惯例。

最新更新