Django的:类型错误:'像'对象不是可迭代(Ajax请求) [英] Django: TypeError: 'Like' object is not iterable (Ajax request)
问题描述
我没有收到关于模式的清晰图像(像)对象不是可迭代。
错误
喜欢,创建= Like.objects.create(问题= create_id)
类型错误:'像'对象不是可迭代
model.py
类问题(models.Model):
用户= models.ForeignKey(用户)
标题= models.CharField(MAX_LENGTH = 200)
说明= models.TextField()
位置= models.CharField(MAX_LENGTH = 150)
标签= TaggableManager()
时间= models.DateTimeField(auto_now_add =真)
高清__uni code __(个体经营):
回报self.title
班赞(models.Model):
用户= models.ManyToManyField(用户,related_name ='喜欢')
问题= models.ForeignKey(问题)
日期= models.DateTimeField(auto_now_add =真)
likecount = models.IntegerField(默认值= 0)
urls.py
URL(R'^像/ $','apps.question.views.like,名字=喜欢),
views.py
高清像(要求):
瓦尔= {}
如果request.method =='POST':
用户= request.user
tutorial_id = request.POST.get('tutorial_id',无)
create_id = get_object_or_404(问题,ID = tutorial_id)
喜欢,创建= Like.objects.create(问题= create_id)
尝试:
user_liked = Like.objects.get(问题= create_id,用户=用户)
除:
user_liked =无
如果user_liked:
user_liked.likecount - = 1
liked.user.remove(request.user)
user_liked.save()
其他:
liked.user.add(request.user)
liked.likecount + = 1
liked.save()
返回的Htt presponse(simplejson.dumps(增值经销商,用户),
MIMETYPE ='应用程序/ JavaScript的)
模板
<按钮式=按钮级=BTN BTN请求NAME ={{question.id}}ID =像>请求< /按钮&GT ;
<脚本>
$('#象)。点击(函数(){
$阿贾克斯({
键入:POST,
网址:{%URL'像'%},
数据:{tutorial_id:$(本).attr(名称),csrfmiddlewaretoken:{{csrf_token}}},
数据类型:文本,
成功:函数(响应){
警报(你喜欢这个')
},
错误:函数(RS,E){
警报(rs.responseText);
}
});
})
< / SCRIPT>
我在这里缺少什么,任何人都可以解释我?
谢谢!
Like.objects.create(问题= create_id)
返回一个对象(如同
)。
那么,做象,创造= Like.objects.create(问题= create_id)
不起作用,因为有一个在右边只有一个项目,所以它可以 T为解压缩(比如,如果你做了象,创造= 1
)。
这是返回的对象和创建
Boolean对象的方法的 get_or_create
:
象,创造= Like.objects.get_or_create(问题= create_id)
I am not getting a clear picture regarding the Model (Like) object is not iterable.
Error
liked, created = Like.objects.create(question=create_id)
TypeError: 'Like' object is not iterable
model.py
class Question(models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length= 200)
description = models.TextField()
location = models.CharField(max_length=150)
tags = TaggableManager()
time = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return self.title
class Like(models.Model):
user = models.ManyToManyField(User, related_name='likes')
question = models.ForeignKey(Question)
date = models.DateTimeField(auto_now_add=True)
likecount = models.IntegerField(default=0)
urls.py
url(r'^like/$', 'apps.question.views.like', name='like'),
views.py
def like(request):
vars = {}
if request.method == 'POST':
user = request.user
tutorial_id = request.POST.get('tutorial_id', None)
create_id = get_object_or_404(Question, id=tutorial_id)
liked, created = Like.objects.create(question=create_id)
try:
user_liked = Like.objects.get(question=create_id, user=user)
except:
user_liked = None
if user_liked:
user_liked.likecount -= 1
liked.user.remove(request.user)
user_liked.save()
else:
liked.user.add(request.user)
liked.likecount += 1
liked.save()
return HttpResponse(simplejson.dumps(vars, user),
mimetype='application/javascript')
template
<button type="button" class="btn btn-request" name="{{question.id}}" id="like">Request</button>
<script>
$('#like').click(function(){
$.ajax({
type: "POST",
url: "{% url 'like' %}",
data: {'tutorial_id': $(this).attr('name'), 'csrfmiddlewaretoken': '{{csrf_token}}'},
dataType: "text",
success: function(response) {
alert('You liked this')
},
error: function(rs, e) {
alert(rs.responseText);
}
});
})
</script>
What I am missing here, can anyone explain me?
Thanks!
Like.objects.create(question=create_id)
Returns a single object (a Like
).
So, doing like, created = Like.objects.create(question=create_id)
doesn't work because there's only one item on the right, so it can't be unpacked (like if you did like, created = 1
).
The method that returns the object and a created
boolean object is get_or_create
:
like, created = Like.objects.get_or_create(question=create_id)
这篇关于Django的:类型错误:'像'对象不是可迭代(Ajax请求)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!