如何添加一个对象到一个Django模型,有一个ManyToManyField?



我正在尝试创建一个社交媒体类型的网站,允许用户关注和取消关注另一个用户。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)

相关内容

  • 没有找到相关文章

最新更新