2015-02-18 3 views
0

Прежде чем сохранять его, я хотел бы добавить к нему кавычки с комментариями.Объект Django 'Post' не имеет атрибута '__getitem__'

Вот вид:

@login_required 
def quote_reply(request, quote_id): 
    tform = PostForm() 
    print 'quote_id is:' + quote_id 
    quote = Post.objects.get(pk = quote_id) 
    topic_id = quote.topic_id 
    topic = Topic.objects.get(id= topic_id) 
    print 'quote is' + quote.body 

    args = {} 
    if request.method == 'POST': 
     post = PostForm(request.POST) 


     if post.is_valid(): 
      p = post.save(commit = False) 
      p.topic = topic 
      p.title = post.cleaned_data['title'] 
      p.body = post.cleaned_data['body'] 
      p['body'].append(str(quote)) #problematic line 
      p.creator = request.user 
      p.user_ip = request.META['REMOTE_ADDR'] 

      if len(p.title)< 1: 
          p.title=p.body[:60]    
      p.save() 

      tid = int(topic_id) 
      return HttpResponseRedirect('/forum/topic/%s' % topic_id) 

    else: 
     args.update(csrf(request)) 
     args['form'] = tform 
     args['post'] = quote 
     args['topic_id'] = topic_id 
     return render_to_response('myforum/qoute_reply.html', args, 
            context_instance=RequestContext(request)) 

Я попытался также попытался

p['body'].append(unicode(quote)) 

но дает ту же ошибку.

Цените свою помощь, чтобы решить эту проблему.

Update: Вот сообщение модель

class Post(models.Model): 
    title = models.CharField(max_length=75, null=True, blank=True) 
    created = models.DateTimeField(auto_now_add=True) 
    creator = models.ForeignKey(User, blank=True, null=True) 
    updated = models.DateTimeField(auto_now=True) 
    topic = models.ForeignKey(Topic) 
    body = models.TextField(max_length=10000) 
    user_ip = models.GenericIPAddressField(blank=True, null=True) 

    def __unicode__(self): 
     return u"%s - %s - %s" % (self.creator, self.topic, self.title) 

    def short(self): 
     return u"%s - %s\n%s" % (self.creator, self.title, self.created.strftime("%b %d, %I:%M %p")) 

    short.allow_tags = True 

Не уверен, что делать.

+0

Можете ли вы показать свою модель «Post»? – karthikr

+0

Почему вы используете 'p ['body']' в этой строке? Это ваша ошибка, но я не совсем понимаю, что вы намереваетесь сделать, что заставит вас использовать это, а не 'p.body'. –

+0

@ karthikr Я только что добавил модель. – supermario

ответ

1

Основная проблема заключается в том, что p является экземпляром модели, который не поддерживает синтаксис доступа к атрибуту dict-style. Чтобы получить доступ к атрибуту post, используйте стандартный синтаксис точек, p.post.

Вторая проблема заключается в том, что вы не можете использовать append для изменения Unicode или строкового объекта - они неизменяемы. Вместо этого вы должны создать новый объект Unicode, содержащий требуемый контент, и назначить его. Например:

p.post = post.cleaned_data['body'] + unicode(quote) 
Смежные вопросы