如何在串行器Django中序列化BigIntegerField,TextField

abh*_*hek 7 django serialization biginteger textfield django-rest-framework

我有一个具有以下属性的模型

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)
Run Code Online (Sandbox Code Playgroud)

我已经定义了一个序列化器

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)
Run Code Online (Sandbox Code Playgroud)

但它显示的错误有点像这样

user_id = serializers.BigIntegerField( allow_null=True)
AttributeError: 'module' object has no attribute 'BigIntegerField'
Run Code Online (Sandbox Code Playgroud)

用于文本字段

user_agent = serializers.TextField(allow_blank=True, allow_null=True)
AttributeError: 'module' object has no attribute 'TextField'
Run Code Online (Sandbox Code Playgroud)

现在如何序列化这种类型的数据.

e4c*_*4c5 12

这是因为django rest框架的Serializer没有TextField.如果您的模型具有TextField,则需要在序列化程序中使用CharField.

CharField文本表示.(可选)验证文本是否小于max_length且长于min_length.

对应于django.db.models.fields.CharFielddjango.db.models.fields.TextField.

文档BigIntegerFields从模型中并不清楚,但源代码的这一显示IntegerField是您必须在序列化程序中使用的内容.

  • 对于那些查看此答案的人,相关源代码的更新链接(2018年3月8日)位于[此处](https://github.com/encode/django-rest-framework/blob/d2994e0596c3163ac970b29dad6a61485f938045/rest_framework/serializers.py #L841) (2认同)

小智 5

对于文本字段,您可以遵循以下约定

your_variable_name = serializers.CharField(style={'base_template': 'textarea.html'})

在其余框架文档中建议。