如何解决Follower系统有问题,我在Django中关注自己,并且此错误在/ accounts / users / 2 / accept_follower /中显示ValueError
嘿,我正在尝试通过Django通知发送关注请求,另一端的人将接受或拒绝该请求。但是我有一个问题,当另一端的人接受请求时,会显示此错误
C:\Users\NAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Python 3.8
,他在追随自己。我尝试在send_follow_request函数中打印出current_user和user,它正确显示了两个用户,但是在accept_follow_request函数中,两个用户都是相同的!如何更改?
这是我现在拥有的代码。
ValueError at /accounts/users/2/accept_follower/
The view accounts.views.accept_follow_request didn't return an HttpResponse object. It returned None instead.
这是通知视图
def send_follow_request(request,id):
current_user = request.user
user = Account.objects.get(id=id)
notify.send(request.user,recipient=user,verb='has sent you a follow request',target=user)
return redirect('posts:userprofile',user.username)
def accept_follow_request(request,id):
current_user = request.user
user = Account.objects.get(id=id)
contact,created = Contact.objects.get_or_create(user_from=request.user,user_to=user,follow_status='AC')
if user != request.user:
create_action(request.user,'started following',user)
notify.send(request.user,verb='started following you')
return redirect('all_user_notifications')
谁能告诉我问题出在哪里?
这是我在通知模板中使用的形式:
class AllNotificationsList(LoginRequiredMixin,NotificationViewList):
def get_queryset(self,*args,**kwargs):
if get_config()['SOFT_DELETE']:
qset = self.request.user.notifications.active()
else:
qset = self.request.user.notifications.all()
return qset
这是我的模特
{% if notice.target == user %}
<form action="{% url 'accept_follow_request' user.id %}">
<button class="btn-sm btn-success" type="submit">Accept</button>
<a href="" class="btn btn-sm btn-danger">Cancel</a>
</form>
url:
class Contact(models.Model):
user_from = models.ForeignKey(settings.AUTH_USER_MODEL,related_name='rel_from_set',on_delete=models.CASCADE)
user_to = models.ForeignKey(settings.AUTH_USER_MODEL,related_name='rel_to_set',on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True,db_index=True)
follow_status = models.CharField(choices=FOLLOW_STATUS,max_length=10)
#USER_FROM IS THE ONE WHO IS FOLLOWING AND USER_TO IS ONE BEING FOLLOWED
class Meta:
ordering = ('-created',)
def __str__(self):
return f'{self.user_from} follows {self.user_to}'
following = models.ManyToManyField('self',through=Contact,related_name='followers',symmetrical=False)
#adding the above field to User Model class
user_model = get_user_model()
user_model.add_to_class('following',models.ManyToManyField('self',symmetrical=False))
跟踪:
path('<int:id>/accept_follower/',views.accept_follow_request,name='accept_follow_request'),
谢谢!
解决方法
似乎用户== request.user,因为在这种情况下,您没有返回任何响应(如果有,则没有)
我想为accept_follower构造的URL的URL ID错误(已通知用户,而不是请求关注的用户的ID)
这就是您关注自己的原因
contact,created = Contact.objects.get_or_create(user_from=request.user,user_to=user,follow_status='AC')
所以下面一行内容(而不是user.id(它的目标)发送sender的id):
{% if notice.target == user %}
<form action="{% url 'accept_follow_request' notice.actor.id %}">
<button class="btn-sm btn-success" type="submit">Accept</button>
<a href="" class="btn btn-sm btn-danger">Cancel</a>
</form>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。