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