2013-07-16 79 views
0

還有一個功能:MultipleObjectsReturned和ContentType的

def Add_tag(request): 
    if request.user.is_authenticated(): 
     if request.method == 'POST': 
      form = TagsForm(request.POST) 

     if form.is_valid(): 
      # Get value 
      item_id = form.cleaned_data['item_id'] 
      text = form.cleaned_data['text'] 
      user = request.user 
      model_type = ContentType.objects.get(app_label='tags', model='Tag') 

      # Get or create user rating 
      try: 
       obj_t = Tag.objects.get(user_id=user.id, content_type_id=model_type.id, object_id=item_id) 
      except ObjectDoesNotExist: 
       obj_t = Tag.objects.create(user_id=user.id, content_type_id=model_type.id, object_id=item_id) 

      obj_t.text = text 
      obj_t.save() 

      return HttpResponse(status=200) 

型號

class Tag(models.Model): 
    user = models.ForeignKey(User) 
    text = models.CharField(max_length=100, blank=True, verbose_name=_('name')) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 

    def __unicode__(self): 
     return '%s %s' % self.user 

函數應該只創建一個對象。在第一個電話中,他創建了;第二次更新...第三次(或4/5/6/7 .. 88/99/100 ..隨機)(相同的值)再次創建。

爲什麼創建它?

的MySQL,Django的1,5

回答

0

我的意思是,你不能用得到,因爲在你的數據庫中的多個記錄

GET預計只能檢索到一個記錄/對象多個記錄有過濾器上查詢集

我不明白你爲什麼這樣做,但在你的情況,你將不得不也搭上multipleobject返回例外

,或者使用過濾器

objs = Tag.objects.filter(user_id=user.id, content_type_id=model_type.id, object_id=item_id).update(text=text) 
+0

函數應該只創建一個對象。在第一個電話中,他創建了第二個更新...第三個(覆蓋最有價值的)再次創建。爲什麼創建它? – Silent

+0

@Silent,因爲你正在創建它們 – user710907

+0

什麼? 第一次調用:value(user_id = 1,content_type_id = 2,object_id = 1) - create; 第二次調用:value(user_id = 1,content_type_id = 2,object_id = 1) - update; 第三次調用:value(user_id = 1,content_type_id = 2,object_id = 1) - 再次創建...; – Silent

相關問題