【问题标题】:django model with only one CharField is not JSON serializable只有一个 CharField 的 django 模型不是 JSON 可序列化的
【发布时间】:2014-10-02 18:39:12
【问题描述】:

我有一个非常基本的“地点”模型:

from django.db import models

class Place(models.Model):
    name = models.CharField(max_length=100)

    def __unicode__(self):
        return self.name

我正在尝试使用该应用对其进行审核:https://github.com/diefenbach/django-reviews

当尝试向某个 Place 对象添加评论时,在应用程序的视图 https://github.com/diefenbach/django-reviews/blob/master/reviews/views.py 中,它会到达 te 'save' 方法并实际在数据库中保存一条记录。但是它会引发以下类型错误:

Environment:


Request Method: POST
Request URL: http://ec2-54-77-118-44.eu-west-1.compute.amazonaws.com:5000/reviews/add/11/1

Django Version: 1.6.5
Python Version: 2.7.6
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'south',
 'places',
 'reviews')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Traceback:
File "/home/ubuntu/webapps/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  199.                 response = middleware_method(request, response)
File "/home/ubuntu/webapps/local/lib/python2.7/site-packages/django/contrib/sessions/middleware.py" in process_response
  38.                     request.session.save()
File "/home/ubuntu/webapps/local/lib/python2.7/site-packages/django/contrib/sessions/backends/db.py" in save
  57.             session_data=self.encode(self._get_session(no_load=must_create)),
File "/home/ubuntu/webapps/local/lib/python2.7/site-packages/django/contrib/sessions/backends/base.py" in encode
  87.         serialized = self.serializer().dumps(session_dict)
File "/home/ubuntu/webapps/local/lib/python2.7/site-packages/django/core/signing.py" in dumps
  88.         return json.dumps(obj, separators=(',', ':')).encode('latin-1')
File "/usr/lib/python2.7/json/__init__.py" in dumps
  250.         sort_keys=sort_keys, **kw).encode(obj)
File "/usr/lib/python2.7/json/encoder.py" in encode
  207.         chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py" in iterencode
  270.         return _iterencode(o, 0)
File "/usr/lib/python2.7/json/encoder.py" in default
  184.         raise TypeError(repr(o) + " is not JSON serializable")

Exception Type: TypeError at /reviews/add/11/1
Exception Value: <Place: Teteria India> is not JSON serializable

如果我仍然没有使用任何 AJAX 或 JSON,并且据我所见,评论应用程序的视图也没有,我不明白为什么会出现此错误。跟表格有关系吗?

无论如何,只有一个 CharField 的模型怎么可能不是 JSON 可序列化的?我必须提供序列化吗?

谢谢!

【问题讨论】:

    标签: python json django serialization


    【解决方案1】:

    在第 148 行,它将object 存储在会话中

    request.session["last-rated-object"] = object
    

    然后执行重定向到reviews_thank_you 的视图

    def thank_you(request, template_name="reviews/thank_you.html"):
        """Displays a thank you page.
        """
        if request.session.has_key("last-rated-object"):
            object = request.session.get("last-rated-object")
            del request.session["last-rated-object"]
        else:
            object = None
    
        return render_to_response(template_name, RequestContext(request, {
            "object" : object,
        }))
    

    它返回 object 而不对其进行序列化,我认为这就是问题所在。您可以编辑该视图以返回您object 的序列化版本吗?

    【讨论】:

    • 我用的是github.com/diefenbach/django-reviews/blob/master/reviews/…的视图,其实它只存储了'new_review'对象,正如你在文件的第140行看到的那样,实际上它确实保存成功了。将“Place”对象分配给 request.session 时,问题应该在第 148 行。但是我还是不知道怎么解决...谢谢你的帮助!
    • @MartíBosch 可以请您粘贴错误的完整跟踪吗?
    猜你喜欢
    • 1970-01-01
    • 2019-12-27
    • 2021-11-27
    • 2010-11-30
    • 2017-06-18
    • 2013-04-29
    • 1970-01-01
    • 2017-08-17
    • 2020-03-04
    相关资源
    最近更新 更多