首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyAMF DatabaseError:‘数据库不支持此查询。’返回User对象时

PyAMF DatabaseError:‘数据库不支持此查询。’返回User对象时
EN

Stack Overflow用户
提问于 2011-11-19 12:47:12
回答 1查看 403关注 0票数 2

这是我得到的错误:

代码语言:javascript
复制
ERROR    2011-11-19 04:19:55,441 django.py:164] Error encoding AMF request
Traceback (most recent call last):
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/remoting/gateway/django.py", line 161, in __call__
    logger=self.logger, timezone_offset=timezone_offset)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/remoting/__init__.py", line 676, in encode
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/remoting/__init__.py", line 520, in _write_body
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/remoting/__init__.py", line 486, in _encode_body
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/codec.py", line 499, in writeElement
    func(data)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/amf0.py", line 657, in writeAMF3
    self.context.getAMF3Encoder(self).writeElement(data)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/codec.py", line 499, in writeElement
    func(data)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/amf3.py", line 1456, in writeObject
    self.writeElement(value)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/codec.py", line 499, in writeElement
    func(data)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/amf3.py", line 1298, in writeList
    [self.writeElement(x) for x in n]
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/codec.py", line 499, in writeElement
    func(data)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/codec.py", line 358, in __call__
    ret = self.func(data, encoder=self.encoder)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/adapters/_django_db_models_base.py", line 276, in writeDjangoObject
    encoder.writeObject(referenced_object)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/amf3.py", line 1468, in writeObject
    self.writeElement(value)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/codec.py", line 499, in writeElement
    func(data)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/codec.py", line 358, in __call__
    ret = self.func(data, encoder=self.encoder)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/adapters/_django_db_models_base.py", line 276, in writeDjangoObject
    encoder.writeObject(referenced_object)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/amf3.py", line 1468, in writeObject
    self.writeElement(value)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/codec.py", line 499, in writeElement
    func(data)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/codec.py", line 358, in __call__
    ret = self.func(data, encoder=self.encoder)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/adapters/_django_db_models_base.py", line 276, in writeDjangoObject
    encoder.writeObject(referenced_object)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/amf3.py", line 1447, in writeObject
    attrs = alias.getEncodableAttributes(obj, codec=self)
  File "/Library/Python/2.6/site-packages/PyAMF-0.6.1-py2.6-macosx-10.6-universal.egg/pyamf/adapters/_django_db_models_base.py", line 173, in getEncodableAttributes
    attrs[name] = [x for x in getattr(obj, name).all()]
  File "/Users/bryce/Documents/Aptana Studio 3 Workspace/django-blog/django/db/models/query.py", line 107, in _result_iter
    self._fill_cache()
  File "/Users/bryce/Documents/Aptana Studio 3 Workspace/django-blog/django/db/models/query.py", line 774, in _fill_cache
    self._result_cache.append(self._iter.next())
  File "/Users/bryce/Documents/Aptana Studio 3 Workspace/django-blog/django/db/models/query.py", line 275, in iterator
    for row in compiler.results_iter():
  File "/Users/bryce/Documents/Aptana Studio 3 Workspace/DennysBE/djangotoolbox/db/basecompiler.py", line 225, in results_iter
    self.check_query()
  File "/Users/bryce/Documents/Aptana Studio 3 Workspace/DennysBE/djangotoolbox/db/basecompiler.py", line 273, in check_query
    raise DatabaseError('This query is not supported by the database.')
DatabaseError: This query is not supported by the database.

以下是我的模型,它们对这个问题很重要:

代码语言:javascript
复制
class ChallengeAct(models.Model):
    challenge = models.ForeignKey(Challenge, blank=True, null=True)
    user = models.ForeignKey(User, blank=True, null=True)
    start_date = models.DateTimeField(blank=True, null=True)
    progress_value = models.IntegerField(default=0)
    earned_coupon = models.ForeignKey(EarnedCoupon, blank=True, null=True)

以下是导致错误的方法:

代码语言:javascript
复制
def foo_bar(request):
    user = request.user
    c = ChallengeAct()
    c.challenge = Challenge.objects.get(id=1)
    c.start_date = datetime.now()
    c.progress_value = 1
    c.user = user
    c.save()

#    Here is where I set the user to null to avoid the DatabaseError
    c.user = None
    return [c]

有趣的是,我需要在返回c.user = None之前设置它,这样我就不会遇到DatabaseError: This query is not supported by the database.问题。

--更新--我越想越觉得获取用户对象是一个pyamf和django-nonrel问题。我猜测,当pyamf试图获取user对象时,它正在使用某种类型的连接查询,而django-nonrel不支持这种类型的连接查询。

为什么会这样呢?有没有办法绕过它?

EN

回答 1

Stack Overflow用户

发布于 2011-11-24 03:19:18

您不必为用户模型允许blank=True, null=True。通常,django.contrib.auth.models.AnonymousUser会处理匿名请求。它可能会解决问题,也可能不会解决问题,但值得一试,即:

代码语言:javascript
复制
class ChallengeAct(RewardActBase):
    user = models.ForeignKey(User)
    ....
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8191976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档