2017-10-09 56 views
1

我正在嘗試創建一個跟隨者系統,用戶可以在用戶和用戶之間但不在用戶和投資者之間關注投資者。但是我收到一個錯誤。ValueError:無法查詢「」:必須是「用戶」實例

我仍然不確定是否必須創建一個不同的表格來跟隨或不,但這裏是代碼。請分享你的想法爲用戶和投資者之間的跟蹤系統的建模更好

class Investor(models.Model): 
    investor = models.ForeignKey(User, on_delete=models.CASCADE) 
    name = models.CharField(max_length=200, blank=False, 
          null=False, help_text='Full Name') 
    followers = models.ManyToManyField(
     User, related_name='followers', blank=True) 

     @classmethod 
    def follow_investor(cls, investor, follower): 
     investor, created = cls.objects.get_or_create(investor=investor) 
     investor.followers.add(follower) 

    @classmethod 
    def unfollow_investor(cls, investor, follower): 
     investor, created = cls.objects.get_or_create(investor=investor) 
     investor.followers.remove(follower) 



url(r'^investor/(?P<action>.+)/(?P<slug>[-\w]+)$', 
    views.follow_unfollow_investor, name="follow-unfollow-investor"), 


def follow_unfollow_investor(request, action, slug=None): 
    follower = request.user 
    investor = Investor.objects.get(slug=slug) 
    if action == "add": 
     Investor.follow_investor(investor, follower) 
    elif action == "remove": 
     Investor.unfollow_investor(user, follower) 
    return redirect('/') 

UPDATE 用戶是從django.contrib.auth.models

堆棧跟蹤

Internal Server Error: /investor/add/milan-raymond 
Traceback (most recent call last): 
    File "/home/milan/.virtualenvs/startup/lib/python3.5/site-packages/django/core/handlers/exception.py", line 41, in inner 
    response = get_response(request) 
    File "/home/milan/.virtualenvs/startup/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/home/milan/.virtualenvs/startup/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/home/milan/Projects/startup/investors/views.py", line 32, in follow_unfollow_investor 
    Investor.follow_investor(investor, follower) 
    File "/home/milan/Projects/startup/investors/models.py", line 72, in follow_investor 
    investor, created = cls.objects.get_or_create(investor=investor) 
    File "/home/milan/.virtualenvs/startup/lib/python3.5/site-packages/django/db/models/manager.py", line 85, in manager_method 
    return getattr(self.get_queryset(), name)(*args, **kwargs) 
    File "/home/milan/.virtualenvs/startup/lib/python3.5/site-packages/django/db/models/query.py", line 464, in get_or_create 
    return self.get(**lookup), False 
    File "/home/milan/.virtualenvs/startup/lib/python3.5/site-packages/django/db/models/query.py", line 371, in get 
    clone = self.filter(*args, **kwargs) 
    File "/home/milan/.virtualenvs/startup/lib/python3.5/site-packages/django/db/models/query.py", line 784, in filter 
    return self._filter_or_exclude(False, *args, **kwargs) 
    File "/home/milan/.virtualenvs/startup/lib/python3.5/site-packages/django/db/models/query.py", line 802, in _filter_or_exclude 
    clone.query.add_q(Q(*args, **kwargs)) 
    File "/home/milan/.virtualenvs/startup/lib/python3.5/site-packages/django/db/models/sql/query.py", line 1250, in add_q 
    clause, _ = self._add_q(q_object, self.used_aliases) 
    File "/home/milan/.virtualenvs/startup/lib/python3.5/site-packages/django/db/models/sql/query.py", line 1276, in _add_q 
    allow_joins=allow_joins, split_subq=split_subq, 
    File "/home/milan/.virtualenvs/startup/lib/python3.5/site-packages/django/db/models/sql/query.py", line 1179, in build_filter 
    self.check_related_objects(field, value, opts) 
    File "/home/milan/.virtualenvs/startup/lib/python3.5/site-packages/django/db/models/sql/query.py", line 1076, in check_related_objects 
    self.check_query_object_type(value, opts, field) 
    File "/home/milan/.virtualenvs/startup/lib/python3.5/site-packages/django/db/models/sql/query.py", line 1054, in check_query_object_type 
    (value, opts.object_name)) 
ValueError: Cannot query "milan": Must be "User" instance. 
[09/Oct/2017 14:02:18] "GET /investor/add/milan-raymond HTTP/1.1" 500 138655 
+1

添加的'User'模型的定義和錯誤的堆棧跟蹤。 –

+0

@ShikharChauhan我已經用堆棧跟蹤更新了這個問題。關於用戶模型,它是從django.contrib.auth.models繼承的 – milan

回答

1

要回答你的問題,更改:

investor, created = cls.objects.get_or_create(investor=investor) 

investor, created = cls.objects.get_or_create(investor=investor.investor) 

你應該investor場改名爲user以避免混淆;)

+0

非常感謝這解決了我的問題。由於命名問題,我感到困惑。我感到問題在給出正確的名稱:)。你對建模部分有什麼想法嗎?我認爲單獨的表格會更好,因爲我可能需要跟蹤時間,取消關注時間等。你說什麼? – milan

相關問題