[英]create() takes 1 positional argument but 2 were given in python
[英]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.