簡體   English   中英

create()接受1個位置參數,但給出了2個?

[英]create() takes 1 positional argument but 2 were given?

我有一個名為Following的模型,其中包含以下字段:

class Following(models.Model):
    target = models.ForeignKey('User', related_name='followers', on_delete=models.CASCADE)
    follower = models.ForeignKey('User', related_name='targets', on_delete=models.CASCADE)

    def __str__(self):
        return '{} is followed by {}'.format(self.target, self.follower)

我要創建的是一個跟隨按鈕,當按下該按鈕時,將為目標提供跟隨者。 在具有跟隨按鈕的視圖內部,具有以下邏輯:

class ProfileView(DetailView):
    model = User
    slug_field = 'username'
    template_name = 'oauth/profile.html'
    context_object_name = 'user_profile' # Without this, Django would default to request.user instead which is the logged in user

    def post(self, request, slug):
        follower = self.request.user

        self.object = self.get_object()
        context = self.get_context_data(object=self.object)

        follow_unfollow(follower, self.object.id)  # Error is found inside this function
        return render(request, self.template_name, context=context)

def follow_unfollow(follower, id):
    target = get_object_or_404(User, id=id)

    if follower.is_authenticated():
        if follower in target.followers.all():
            target.followers.delete(follower)

        else:
            target.followers.create(follower)  # Error outputs: create() takes 1 positional argument but 2 were given

當我們要為新的跟隨者創建一行時,發生錯誤,提示create() takes 1 positional argument but 2 were given我在做什么錯?

您需要將關鍵字參數傳遞給create()方法:

target.followers.create(follower=follower)

或者可以使用add()方法代替:

target.followers.add(follower)

也應該remove而不是delete

target.followers.remove(follower)

獲取User實例時,您錯過了視圖中的某些點,實際上,如果存在Following實例,則需要刪除它,請嘗試以下操作:

def follow_unfollow(follower, id):
    target = get_object_or_404(User, id=id)

    if follower.is_authenticated():
        following = target.followers.filter(follower=follower)
        if following.exists():
            following.delete()
        else:
            # target.followers.create(follower=follower,target=target) 
            Following.objects.create(follower=follower,target=target)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM