如何在序列化程序 Django 中序列化 BigIntegerField、TextField
How to Serialize BigIntegerField, TextField in serializer Django
我有一个具有以下属性的模型
from django.db import models
class ApiLogs(models.Model):
user_id = models.BigIntegerField(null=True)
ip = models.CharField(max_length=16)
user_agent = models.TextField(blank=True, null=True)
client = models.CharField(max_length=50, blank=True, null=True)
client_version = models.CharField(max_length=50, blank=True, null=True)
token = models.TextField(blank=True, null=True)
uri = models.CharField(max_length=200)
method = models.CharField(max_length=20)
我已经定义了一个序列化器
from rest_framework import serializers
class ApiSerializer(serializers.Serializer):
user_id = serializers.BigIntegerField( allow_null=True)
ip = serializers.CharField(max_length=16)
user_agent = serializers.TextField(allow_blank=True, allow_null=True)
client = serializers.CharField(max_length=50, allow_blank=True, allow_null=True)
client_version = serializers.CharField(max_length=50, allow_blank=True, allow_null=True)
token = serializers.TextField(allow_blank=True, allow_null=True)
uri = serializers.CharField(max_length=200)
method = serializers.CharField(max_length=20)
但它显示的错误有点像这样
user_id = serializers.BigIntegerField( allow_null=True)
AttributeError: 'module' object has no attribute 'BigIntegerField'
对于文本字段
user_agent = serializers.TextField(allow_blank=True, allow_null=True)
AttributeError: 'module' object has no attribute 'TextField'
现在如何序列化这种类型的数据。
这是因为 django rest 框架的 Serializer 没有 TextField。如果您的模型有 TextField,您需要在序列化程序中使用 CharField。
CharField A text representation. Optionally validates the text to be
shorter than max_length and longer than min_length.
Corresponds to django.db.models.fields.CharField
or
django.db.models.fields.TextField
.
文档对模型中的 BigIntegerFields
不是很清楚,但是这个 line for the source code 表明 IntegerField 又是你必须在序列化器中使用的东西。
对于文本字段,您可以遵循以下约定
your_variable_name = serializers.CharField(style={'base_template': 'textarea.html'})
在 rest 框架文档中建议。
将 TextField
替换为 CharField
。两者具有基本相同的功能,但序列化器只理解后者。
我有一个具有以下属性的模型
from django.db import models
class ApiLogs(models.Model):
user_id = models.BigIntegerField(null=True)
ip = models.CharField(max_length=16)
user_agent = models.TextField(blank=True, null=True)
client = models.CharField(max_length=50, blank=True, null=True)
client_version = models.CharField(max_length=50, blank=True, null=True)
token = models.TextField(blank=True, null=True)
uri = models.CharField(max_length=200)
method = models.CharField(max_length=20)
我已经定义了一个序列化器
from rest_framework import serializers
class ApiSerializer(serializers.Serializer):
user_id = serializers.BigIntegerField( allow_null=True)
ip = serializers.CharField(max_length=16)
user_agent = serializers.TextField(allow_blank=True, allow_null=True)
client = serializers.CharField(max_length=50, allow_blank=True, allow_null=True)
client_version = serializers.CharField(max_length=50, allow_blank=True, allow_null=True)
token = serializers.TextField(allow_blank=True, allow_null=True)
uri = serializers.CharField(max_length=200)
method = serializers.CharField(max_length=20)
但它显示的错误有点像这样
user_id = serializers.BigIntegerField( allow_null=True)
AttributeError: 'module' object has no attribute 'BigIntegerField'
对于文本字段
user_agent = serializers.TextField(allow_blank=True, allow_null=True)
AttributeError: 'module' object has no attribute 'TextField'
现在如何序列化这种类型的数据。
这是因为 django rest 框架的 Serializer 没有 TextField。如果您的模型有 TextField,您需要在序列化程序中使用 CharField。
CharField A text representation. Optionally validates the text to be shorter than max_length and longer than min_length.
Corresponds to
django.db.models.fields.CharField
ordjango.db.models.fields.TextField
.
文档对模型中的 BigIntegerFields
不是很清楚,但是这个 line for the source code 表明 IntegerField 又是你必须在序列化器中使用的东西。
对于文本字段,您可以遵循以下约定
your_variable_name = serializers.CharField(style={'base_template': 'textarea.html'})
在 rest 框架文档中建议。
将 TextField
替换为 CharField
。两者具有基本相同的功能,但序列化器只理解后者。