Python Django上的用户跟随者模型。无法在指定中间模型的ManyToManyField上使用add()。使用帐户。联系';他是经理

Python Django上的用户跟随者模型。无法在指定中间模型的ManyToManyField上使用add()。使用帐户。联系';他是经理,python,django,django-models,django-views,django-users,Python,Django,Django Models,Django Views,Django Users,我是Django的新手,请原谅我在代码或逻辑上犯的愚蠢错误 简介:我试图在Django中创建一个用户追随者模型。用户可以跟踪和取消跟踪网站上的其他用户 错误:我已经为我的后续/取消跟踪制作了模型,我还制作了视图我收到了此错误 AttributeError at /accounts/admin/follow/ Cannot use add() on a ManyToManyField which specifies an intermediary model. Use accounts.Conta

我是Django的新手,请原谅我在代码或逻辑上犯的愚蠢错误

简介:我试图在Django中创建一个用户追随者模型。用户可以跟踪和取消跟踪网站上的其他用户

错误:我已经为我的后续/取消跟踪制作了
模型
,我还制作了
视图
我收到了此错误

AttributeError at /accounts/admin/follow/
Cannot use add() on a ManyToManyField which specifies an intermediary model. Use accounts.Contact's Manager instead. 
obj.followers.add(user)
在回溯中突出显示为错误的来源

下面是我的型号。py

from django.contrib.auth.models import User
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    city = models.CharField(max_length=100)
    country = models.CharField(max_length=100)
    def get_absolute_url(self):
        return reverse('accounts:profile', kwargs={'username': self.user.username})

class Contact(models.Model):
    user_from = models.ForeignKey(User, related_name='suppporter')
    user_to = models.ForeignKey(User, related_name='leader')

    def __str__(self):
        return '{} follows {}'.format(self.user_from, self.user_to)


User.add_to_class('following',
                  models.ManyToManyField('self', through=Contact, related_name='followers', symmetrical=False))
我认为models.py可能很好。我认为错误在于我的观点。 下面是我的视图。py

class FollowToggle(LoginRequiredMixin, RedirectView):

    def get_redirect_url(self, *args, **kwargs):
        username = self.kwargs.get('username')
        print(username + " This is the user who will be followed") # This prints correct
        profile = get_object_or_404(Profile, user__username=username)
        print(profile) # This prints correct
        obj = get_object_or_404(User, username=username)
        print(obj) # This prints correct
        url_ = profile.get_absolute_url()
        print(url_) # This prints correct
        user = self.request.user
        print(user) # This prints correct
        if user.is_authenticated():
            if user in obj.followers.all(): # I know this is the source of the error.
                obj.followers.remove(user)
            else:
                obj.followers.add(user)
        return url_
下面是url.py以防万一

url(r'^(?P<username>[-\w]+)/follow/$', views.FollowToggle.as_view(), name='follow'),
url(r'^(?P[-\w]+)/follow/$,views.FollowToggle.as_view(),name='follow'),

对于通过第三个模型定义的多个关系,不能使用
添加
删除
方法。从:

与正常的多对多字段不同,不能使用add()、create()或set()创建关系

相反,您应该使用
联系
经理:

if user.is_authenticated():
    if user in obj.followers.all(): # I know this is the source of the error.
        Contact.objects.filter(user_to=obj, user_from=user).delete()
    else:
        Contact.objects.create(user_to=obj, user_from=user)

在Django 2.2中,您可以使用
add
remove
set
方法()

您还可以使用add()、create()或set()来创建关系,只要您通过指定任何必填字段的默认值即可