python - 如何停止在 django 上出现值错误?
问题描述
我试图在我的 django 项目中添加一个跟随系统,当我运行我的代码时,我收到一个The QuerySet value for an exact lookup must be limited to one result using slicing.
错误,它说错误的部分在 views.py 文件的这行代码上following_obj = Following.objects.get(user=user)
。
视图.py
def profile(request, username=None):
profile, created = Profile.objects.get_or_create(user=request.user)
if username:
post_owner = get_object_or_404(User, username=username)
user_posts = Profile.objects.filter(user_id=post_owner)
user = User.objects.filter(username=username)
is_following = Following.objects.filter(user=request.user, followed=user)
following_obj = Following.objects.get(user=user)
follower, following = following_obj.follower.count(), following_obj.followed.count()
else:
post_owner = request.user
user_posts = Profile.objects.filter(user=request.user)
args1 = {
'post_owner': post_owner,
'user_posts': user_posts,
'connection': is_following,
'follower': follower,
'following': following,
}
return render(request, 'profile.html', args1)
def follow(request, username):
main_user = request.user
to_follow = User.objects.get(username=username)
following = Following.objects.filter(user = main_user, followed = to_follow)
is_following = True if following else False
if is_following:
Following.unfollow(main_user, to_follow)
is_following = False
else:
Following.follow(main_user, to_follow)
is_following = True
resp = {
'following': is_following,
}
response = json.dumps(resp)
return HttpResponse(response, content_type="application/json")
模型.py
class Profile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
profile_pic = models.ImageField(upload_to='profile_pics', null=True, blank=True, default='default.png')
bio = models.CharField(max_length=400, default=1, null=True)
follower = models.IntegerField(default=0)
following = models.IntegerField(default=0)
def __str__(self):
return f'{self.user.username} Profile'
class Following(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
followed = models.ManyToManyField(User, related_name="followed")
follower = models.ManyToManyField(User, related_name="follower")
@classmethod
def follow(cls, user, another_account):
obj, created = cls.objects.get(user = user)
obj.followed.add(another_account)
print("followed")
@classmethod
def unfollow(cls, user, another_account):
obj, create = cls.objects.get(user = user)
obj.followed.remove(another_account)
print("unfollowed")
def __str__(self):
return f'{self.user.username} Profile'
profile.html
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
{% if connection and not request.user == post_owner %}
<a type="button" class="btn btn-outline-primary" id="follow" role="button" href="{% url 'follow' post_owner.username %}">Unfollow</a>
{% elif not connection and not request.user == post_owner %}
<a type="button" class="btn btn-outline-primary" id="follow" role="button" href="{% url 'follow' post_owner.username %}">Follow</a>
{% endif %}
<p>Follower : {{follower}} Following : {{following}}</p>
<script type="text/javascript">
$("#follow").click(function(e){
e.preventDefault();
var href = this.href;
$.ajax({
url : href,
success : function(response){
if(response["following"]){
$("#follow").html("Unfollow");
}
else{
$("#follow").html("Follow");
}
}
})
})
</script>
解决方案
该行:
user = User.objects.filter(username=username)
返回对象的集合,您应该使用[Django-doc]User
检索单个对象:.get(…)
user = User.objects.get(username=username)
推荐阅读
- android - Android bundle compile 的 MinSdkVersion 错误消息(React Native with google-services.json)
- c# - 如何在 Unity 3D 中修复我的拾音系统?
- dns - 如何将 powerdns/pdns 4.1.14 升级到 4.5
- java - 无法验证连接 org.postgresql.jdbc.PgConnection
- github - 如何用vs代码界面查看github仓库代码?
- cookies - 在 set-cookie 响应标头中接收到非 httpOnly cookie,但 js 无法访问
- javascript - 如何在 JavaScript 的响应式菜单中为菜单的每个元素显示子菜单
- python - 搅拌机脚本 all_objects 不循环遍历所有对象
- reactjs - 无法在 Docker shell 脚本上运行反应应用程序
- c++ - 在哪里将 SAL 注释插入到 C++ 中的 lambda 表达式?