2011-04-17 68 views
3

我想創建一個評論應用程序,以便在需要它的地方使用它,所以我geuss必須使用ContentType將註釋附加到我的項目的不同模型。 所以在這裏:Django評論應用程序,獲取內容類型

model

class Comment(models.Model): 
    user = models.ForeignKey(User, blank=True, null=True) 
    text = models.TextField((u'Текст комментария')) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 

view

def add_comment(request): 
    if request.method == 'POST': 
     form = CommentForm(request.POST) 

     if form.is_valid(): 
      new_comment = Comment() 
      new_comment.text = request.POST['text'] 
      new_comment.content_type = ??? 
      new_comment.object_id = request.POST['object_id'] 
      new_comment.user = request.user 
      new_comment.save() 
      return HttpResponseRedirect(request.META['HTTP_REFERER']) 
    else: ... 

我怎樣才能得到我一起工作的電流模式的內容類型? 我有應用程序新聞和模型發佈,所以我想評論我的帖子。

我知道我可以使用ContentType.objects.get(app_label="news", model="post"),但我得到確切的價值,所以這樣我的評論應用程序將不會是多用途的。

P.S.對不起英文不好。

回答

3

檢查django.contrib.comments.forms.CommentForm.get_comment_create_data:它返回要使用的映射來創建一個未保存的註釋實例:

return dict(
    content_type = ContentType.objects.get_for_model(self.target_object), 
    object_pk = force_unicode(self.target_object._get_pk_val()), 
    user_name = self.cleaned_data["name"], 
    user_email = self.cleaned_data["email"], 
    user_url  = self.cleaned_data["url"], 
    comment  = self.cleaned_data["comment"], 
    submit_date = datetime.datetime.now(), 
    site_id  = settings.SITE_ID, 
    is_public = True, 
    is_removed = False, 
) 

所以我想,你正在尋找的路線是:

content_type = ContentType.objects.get_for_model(self.target_object), 

Remenber,self是表單實例,並且self.target_object()返回當前註釋附加到的實例。