2017-09-14 101 views
2

我有一個簡單的函數,它看起來像這樣:Django的獲得()返回一個元組,而不是對象

parent_key = SeoKeys.objects.get(view_id=view_id, key_nbr=key_nbr) 
    if parent_key.status != 'active': 
     parent_key.status = status 
     parent_key.save() 

    metrics, created = SeoMetrics.objects.get_or_create(
                 seo_url = url_sent, 
                 date = date, 
                 parent_key = parent_key, 
                 defaults = { 
                   'parent_key':parent_key, 
                   'seo_url': url_sent, 
                   'url_found':url_found, 
                   'position':position, 
                   } 
                 ) 

現在,在理論上這應該工作,但是我得到以下錯誤:

ValueError: Cannot assign "(<SeoKeys: SeoKeys object>,)": "SeoMetrics.parent_key" must be a "SeoKeys" instance. 

發生這種情況是因爲它是一個元組。如果我這樣做'parent_key':parent_key[0]它會保存它很好。然而,這似乎是一個相當黑客的解決方案,我想知道爲什麼會發生這種情況。有任何想法嗎?

我的模型看起來是這樣的:

class SeoMetrics(models.Model): 
    parent_key = models.ForeignKey('SeoKeys', on_delete=models.CASCADE) 

編輯: 添加完整的錯誤:

Internal Server Error: /hook/ 
Traceback (most recent call last): 
    File "/Users/Costantin/GDrive/Analytic.me/dev/venv/lib/python3.5/site-packages/django/core/handlers/exception.py", line 41, in inner 
    response = get_response(request) 
    File "/Users/Costantin/GDrive/Analytic.me/dev/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/Users/Costantin/GDrive/Analytic.me/dev/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/Users/Costantin/GDrive/Analytic.me/dev/venv/lib/python3.5/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view 
    return view_func(*args, **kwargs) 
    File "/Users/Costantin/GDrive/Analytic.me/dev/backend/apps/seo_app/views.py", line 152, in webhook 
    metrics.parent_key = parent, 
    File "/Users/Costantin/GDrive/Analytic.me/dev/venv/lib/python3.5/site-packages/django/db/models/fields/related_descriptors.py", line 216, in __set__ 
    self.field.remote_field.model._meta.object_name, 
ValueError: Cannot assign "(<SeoKeys: SeoKeys object>,)": "SeoMetrics.parent_key" must be a "SeoKeys" instance. 
+0

請用traceback發佈整個錯誤消息。您也不必在'defaults'中重複'parent_key'和'seo_url',因爲您已經將它們傳遞爲'kwargs'。 – Selcuk

+0

@Selcuk我添加了完整的錯誤。感謝'kwargs'我不知道他們會自動添加,但它確實有道理。 – Costantin

回答

4
File "/Users/Costantin/GDrive/Analytic.me/dev/backend/apps/seo_app/views.py", line 152, in webhook 
    metrics.parent_key = parent, 

此代碼創建一個元組。刪除行尾的逗號。

+0

是的,這固定了它。感謝Ignacio – Costantin

+0

所以只是爲下一個發現這個問題的人添加更多信息:**在我的問題編碼之後發生**,在'if not created'部分。這令人困惑,因爲我沒有想到要去那裏看。所以請留意這裏的額外逗號!再次感謝Ignacio – Costantin

相關問題