2013-07-16 2 views
0

Существует функция:MultipleObjectsReturned и ТипСодержимого

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 .. random) (те же значения) создается снова.

Почему это создано?

MySQL, Django 1,5

ответ

0

То, что я имел в виду, вы не можете использовать получить, потому что есть несколько записей в базе данных

прибудут ожидает получить только одну запись/объект для нескольких записей есть фильтр на QuerySet

Я не понимаю, почему вы это делаете, но в вашем случае вам придется также поймать 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

@ Сильно, потому что вы их создаете – user710907

+0

Что? Первый вызов: значение (user_id = 1, content_type_id = 2, object_id = 1) - create; Второй вызов: значение (user_id = 1, content_type_id = 2, object_id = 1) - обновление; Третий вызов: значение (user_id = 1, content_type_id = 2, object_id = 1) - снова создайте ...; – Silent

Смежные вопросы