解決HUE報錯MultipleObjectsReturned: get() returned more than one Document2 -- it returned 2!


 

表現:界面上報錯:,剛登陸進去就能看到,點擊執行也會出現。日志里報:

Traceback (most recent call last):
  File "/home/work/hue-3.10.0/desktop/libs/notebook/src/notebook/decorators.py", line 81, in decorator
    return func(*args, **kwargs)
  File "/home/work/hue-3.10.0/desktop/libs/notebook/src/notebook/api.py", line 124, in execute
    history = _historify(notebook, request.user)
  File "/home/work/hue-3.10.0/desktop/libs/notebook/src/notebook/api.py", line 319, in _historify
    is_history=True
  File "/home/work/hue-3.10.0/build/env/local/lib/python2.7/site-packages/Django-1.6.10-py2.7.egg/django/db/models/manager.py", line 157, in create
    return self.get_queryset().create(**kwargs)
  File "/home/work/hue-3.10.0/build/env/local/lib/python2.7/site-packages/Django-1.6.10-py2.7.egg/django/db/models/query.py", line 322, in create
    obj.save(force_insert=True, using=self.db)
  File "/home/work/hue-3.10.0/desktop/core/src/desktop/models.py", line 1138, in save
    home_dir = Document2.objects.get_home_directory(self.owner)
  File "/home/work/hue-3.10.0/desktop/core/src/desktop/models.py", line 935, in get_home_directory
    return self.get(owner=user, parent_directory=None, name=Document2.HOME_DIR, type='directory')
  File "/home/work/hue-3.10.0/build/env/local/lib/python2.7/site-packages/Django-1.6.10-py2.7.egg/django/db/models/manager.py", line 151, in get
    return self.get_queryset().get(*args, **kwargs)
  File "/home/work/hue-3.10.0/build/env/local/lib/python2.7/site-packages/Django-1.6.10-py2.7.egg/django/db/models/query.py", line 313, in get
    (self.model._meta.object_name, num))
MultipleObjectsReturned: get() returned more than one Document2 -- it returned 2!

復現步驟:已賬號xxxx登錄hue,即可看到異常.

ps: 有人在官網報此問題,http://gethue.com/how-to-fix-the-multipleobjectsreturned-error-in-hue/  但官方沒有給出解決方法.

 

根據stacktrace:  File "/home/work/hue-3.10.0/desktop/core/src/desktop/models.py", line 935, in get_home_directory查到代碼:
  def get_home_directory(self, user):
    try:
      return self.get(owner=user, parent_directory=None, name=Document2.HOME_DIR, type='directory')
    except Document2.DoesNotExist:
      return self.create_user_directories(user)

是class Document2Manager的方法,懷疑是用戶表中存的用戶記錄多了一條,所以查到兩個home directory,查了auth_user表和useradmin_userprofile表,都正常。后又查表desktop_document2,按self.get()中的查詢條件果然查到兩行:

查別的正常賬號,只有一條,解決方法應該是刪掉多余的數據即可。
由於此表有個自連接的外鍵:CONSTRAINT `parent_directory_id_refs_id_4fe2babf` FOREIGN KEY (`parent_directory_id`) REFERENCES `desktop_document2` (`id`), 應先刪除衍生數據,再刪除根數據:
delete from desktop_document2 where parent_directory_id=7;
delete from desktop_document2 where id=7;
之后測試,果然解決。
為何會產生兩條數據,原因未知。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM