我正在尝试创建一个社交媒体类型的网站,允许用户关注和取消关注另一个用户。followers
有一个ManyToManyField,因为user
可以有多个追随者。
models.py
class Follower(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, default="")
followers = models.ManyToManyField(User, related_name="followers")
views.py
def username(request, user):
#get user
user = get_object_or_404(User.objects, username=user)
posts = Post.objects.filter(user=user).order_by('-date_and_time')
#follow button code
follow_or_unfollow = ''
try:
following = get_object_or_404(Follower, Q(
user=user) & Q(followers=request.user))
print(following)
except:
following = False
if following:
follow_or_unfollow = True
else:
follow_or_unfollow = False
if request.POST.get('follow'):
follower = Follower.objects.create(user=request.user)
follower.followers.add(*user)
follow_or_unfollow = False
elif request.POST.get('unfollow'):
follow_or_unfollow = True
#following.delete()
当它得到'follow' POST请求时,我希望它将发送它的用户(登录的用户)添加到关注者中。现在,当我尝试这样做时,我得到了这个错误。
TypeError: django.db.models.fields.related_descriptors.create_forward_many_to_many_manager.<locals>.ManyRelatedManager.add() argument after * must be an iterable, not User
我知道它说它必须是可迭代的,但是有没有办法一次只添加一个对象。另外,如何删除这个特定的对象?
参数中的*
将列表转换为单独的参数。例如,
lst = [1,2,3,4,5]
function(*lst)
可以直接读作
function(1,2,3,4,5)
您已使用follower.followers.add(*user)
。因此,user
必须是一个可迭代对象,可以解压缩并作为列表或参数传递。但是user
是一个单独的User
对象。
在这种情况下,您应该使用follower.followers.add(user)
。