Django的:类型错误:'像'对象不是可迭代(Ajax请求) [英] Django: TypeError: 'Like' object is not iterable (Ajax request)

查看:253
本文介绍了Django的:类型错误:'像'对象不是可迭代(Ajax请求)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我没有收到关于模式的清晰图像(像)对象不是可迭代。

错误

 喜欢,创建= 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆