带mongoDB的Django REST框架:以10为基数的int()的文本无效

带mongoDB的Django REST框架:以10为基数的int()的文本无效,django,mongodb,django-rest-framework,Django,Mongodb,Django Rest Framework,我正在用django(1.5.11)和mongoDB(2.4.9)构建一个网站。由于我想添加RESTAPI,我还安装了Django REST框架(3.0.5)。但我无法让序列化程序在非常简单的模型上正常工作(请参见下文),而是出现以下错误: ValueError at /api/message/ invalid literal for int() with base 10 我相信这个错误与mongoDB标识符不是整数这一事实有关。还要注意,我不想使用MongoEngine(和Django Re

我正在用django(1.5.11)和mongoDB(2.4.9)构建一个网站。由于我想添加RESTAPI,我还安装了Django REST框架(3.0.5)。但我无法让序列化程序在非常简单的模型上正常工作(请参见下文),而是出现以下错误:

ValueError at /api/message/
invalid literal for int() with base 10
我相信这个错误与mongoDB标识符不是整数这一事实有关。还要注意,我不想使用MongoEngine(和Django Rest框架MongoEngine),因为我不想停留在Django哲学中

有什么线索或暗示吗?请在下面找到我的应用程序的一个简单示例

型号.py

from django.db import models
from djangotoolbox import fields

class Message(models.Model):
    created_on = models.DateTimeField(auto_now_add=True, null=True)
    text = models.TextField()
    tags = fields.ListField()
from django import http, template
from rest_framework import generics, renderers, parsers
from . import models, serializers

def messageList(request):
    if request.method == 'GET':
        messages = models.Message.objects.all()
        serializer = serializers.MessageSerializer(messages, many=True)
        return JSONResponse(serializer.data)

class JSONResponse(http.HttpResponse):
        def __init__(self, data, **kwargs):
                content = renderers.JSONRenderer().render(data)
                kwargs['content_type'] = 'application/json'
                super(JSONResponse, self).__init__(content, **kwargs)
from rest_framework import serializers
from . import models

class MessageSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Message
        fields=('id' , 'text',)
from django.conf.urls import patterns, include, url
from . import views

urlpatterns = patterns('',
    url(r'^api/message/$', views.messageList),
)
class MessageSerializer(serializers.ModelSerializer):
    id = serializers.CharField()
    class Meta:
        model = models.Message
        fields=('id' , 'text',)
视图.py

from django.db import models
from djangotoolbox import fields

class Message(models.Model):
    created_on = models.DateTimeField(auto_now_add=True, null=True)
    text = models.TextField()
    tags = fields.ListField()
from django import http, template
from rest_framework import generics, renderers, parsers
from . import models, serializers

def messageList(request):
    if request.method == 'GET':
        messages = models.Message.objects.all()
        serializer = serializers.MessageSerializer(messages, many=True)
        return JSONResponse(serializer.data)

class JSONResponse(http.HttpResponse):
        def __init__(self, data, **kwargs):
                content = renderers.JSONRenderer().render(data)
                kwargs['content_type'] = 'application/json'
                super(JSONResponse, self).__init__(content, **kwargs)
from rest_framework import serializers
from . import models

class MessageSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Message
        fields=('id' , 'text',)
from django.conf.urls import patterns, include, url
from . import views

urlpatterns = patterns('',
    url(r'^api/message/$', views.messageList),
)
class MessageSerializer(serializers.ModelSerializer):
    id = serializers.CharField()
    class Meta:
        model = models.Message
        fields=('id' , 'text',)
序列化程序.py

from django.db import models
from djangotoolbox import fields

class Message(models.Model):
    created_on = models.DateTimeField(auto_now_add=True, null=True)
    text = models.TextField()
    tags = fields.ListField()
from django import http, template
from rest_framework import generics, renderers, parsers
from . import models, serializers

def messageList(request):
    if request.method == 'GET':
        messages = models.Message.objects.all()
        serializer = serializers.MessageSerializer(messages, many=True)
        return JSONResponse(serializer.data)

class JSONResponse(http.HttpResponse):
        def __init__(self, data, **kwargs):
                content = renderers.JSONRenderer().render(data)
                kwargs['content_type'] = 'application/json'
                super(JSONResponse, self).__init__(content, **kwargs)
from rest_framework import serializers
from . import models

class MessageSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Message
        fields=('id' , 'text',)
from django.conf.urls import patterns, include, url
from . import views

urlpatterns = patterns('',
    url(r'^api/message/$', views.messageList),
)
class MessageSerializer(serializers.ModelSerializer):
    id = serializers.CharField()
    class Meta:
        model = models.Message
        fields=('id' , 'text',)
url.py

from django.db import models
from djangotoolbox import fields

class Message(models.Model):
    created_on = models.DateTimeField(auto_now_add=True, null=True)
    text = models.TextField()
    tags = fields.ListField()
from django import http, template
from rest_framework import generics, renderers, parsers
from . import models, serializers

def messageList(request):
    if request.method == 'GET':
        messages = models.Message.objects.all()
        serializer = serializers.MessageSerializer(messages, many=True)
        return JSONResponse(serializer.data)

class JSONResponse(http.HttpResponse):
        def __init__(self, data, **kwargs):
                content = renderers.JSONRenderer().render(data)
                kwargs['content_type'] = 'application/json'
                super(JSONResponse, self).__init__(content, **kwargs)
from rest_framework import serializers
from . import models

class MessageSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Message
        fields=('id' , 'text',)
from django.conf.urls import patterns, include, url
from . import views

urlpatterns = patterns('',
    url(r'^api/message/$', views.messageList),
)
class MessageSerializer(serializers.ModelSerializer):
    id = serializers.CharField()
    class Meta:
        model = models.Message
        fields=('id' , 'text',)

您必须在序列化程序中添加id字段作为charfield

序列化程序.py

from django.db import models
from djangotoolbox import fields

class Message(models.Model):
    created_on = models.DateTimeField(auto_now_add=True, null=True)
    text = models.TextField()
    tags = fields.ListField()
from django import http, template
from rest_framework import generics, renderers, parsers
from . import models, serializers

def messageList(request):
    if request.method == 'GET':
        messages = models.Message.objects.all()
        serializer = serializers.MessageSerializer(messages, many=True)
        return JSONResponse(serializer.data)

class JSONResponse(http.HttpResponse):
        def __init__(self, data, **kwargs):
                content = renderers.JSONRenderer().render(data)
                kwargs['content_type'] = 'application/json'
                super(JSONResponse, self).__init__(content, **kwargs)
from rest_framework import serializers
from . import models

class MessageSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Message
        fields=('id' , 'text',)
from django.conf.urls import patterns, include, url
from . import views

urlpatterns = patterns('',
    url(r'^api/message/$', views.messageList),
)
class MessageSerializer(serializers.ModelSerializer):
    id = serializers.CharField()
    class Meta:
        model = models.Message
        fields=('id' , 'text',)

Django不会在开箱即用的情况下使用MongoDB。如果要使用MongoDB,您必须安装并使用您提到的库。为什么您认为使用这些库违背了“Django哲学”?我认为使用MongoDB引擎(不是MongoEngine)就足以将Django与MongoDB一起使用。。。不是吗?此外,当我尝试使用MongoEngine Rest框架创建模型时,我无法让Django shell(使用manage.py)使用save()方法创建对象。。。而它使用的是纯Django模型和MongoDB引擎。这就是为什么我想知道MongoEngin是否完全符合Django。