2017-08-16 14 views
3

私はアプリケーションで作業しており、タグに基づいて関連する投稿を表示しようとしています。私はすべてうまく動作しているが、ブラウザで詳細ビューをロードするとエラーが発生するtype object 'Post' has no attribute 'published'私は下に私のコードを掲載していると言う。タイプオブジェクト '投稿'には公開された属性がありませんDjango

モデル:

class Post(models.Model): 
    """docstring for Post.""" 
    STATUS_CHOICES = (
     ('drafts', 'Draft'), 
     ('published', 'Published'),) 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) #blank=True, null=True)#default=1 
    title = models.CharField(max_length = 120) 
    slug = models.SlugField(unique= True) 
    draft = models.BooleanField(default = False) 
    publish = models.DateField(auto_now=False, auto_now_add=False) 
    content = models.TextField() 
    tags = TaggableManager() 
    status = models.CharField(max_length=10,choices=STATUS_CHOICES, default='published') 
    updated = models.DateTimeField(auto_now=True, auto_now_add=False) 
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) 

ビュー:

def view(request, slug =None): 
    instance = get_object_or_404(Post, slug =slug) 
    if instance.draft or instance.publish > timezone.now().date(): 
     redirect(index) 
    #content_type = ContentType.objects.get_for_model(Post) 
    #obj_id = instance.id 
    initial_data = { 
      "content_type": instance.get_content_type, 
      "object_id": instance.id 
    } 
    form = CommentForm(request.POST or None, initial=initial_data) 
    if form.is_valid(): 
     #print (form.cleaned_data) 
     c_type = form.cleaned_data.get("content_type") 
     content_type = ContentType.objects.get(model= c_type) 
     obj_id = form.cleaned_data.get("object_id") 
     c_content =form.cleaned_data.get("content") 
     parent_obj = None 
     try: 
      parent_id = int(request.POST.get("parent_id")) 
     except Exception as e: 
      parent_id = None 

     if parent_id: 
      parent_query = Comment.objects.filter(parent__id= parent_id) 
      if parent_query.exists(): 
       parent_obj = parent_query.first() 

     new_comment, created = Comment.objects.get_or_create(
       user = request.user, 
       content_type = content_type, 
       object_id = obj_id, 
       content = c_content, 
       parent = parent_obj, 

       ) 
     return HttpResponseRedirect(new_comment.content_object.get_absolute_url()) 


    comments = instance.comments 
    # List of similar posts 
    post_tags_ids = instance.tags.values_list('id', flat=True) 
    similar_posts = Post.published.filter(tags__in=post_tags_ids).exclude(id=instance.id) 
    similar_posts = similar_posts.annotate(same_tags=Count('tags')).order_by('-same_tags','-publish')[:4] 
    context = { 
    #"objects": query, 
    "instance": instance, 
    "comments": comments, 
    "form": form, 
    'similar_posts': similar_posts 
    } 
    template = 'view.html' 
    return render(request,template,context) 

追加コードは、リクエストに応じて追加されます。前もって感謝します。

答えて

4

私が正しく理解していれば、あなたは誤字間違いを持っ​​て

similar_posts = Post.published.filter(tags__in=post_tags_ids) 
            .exclude(id=instance.id) 

上記の行は、フィールドpublishを使用するものであれば、それが唯一のクエリセットの引数でない使用することができます。また

similar_posts = Post.objects.filter(tags__in=post_tags_ids) 
            .exclude(id=instance.id) 

する必要があります関連オブジェクト属性として

+0

オハイオ州。ありがとう私は本当にappritiate – King

関連する問題