2017-10-09 92 views
0

我正在研究一個Django項目,其中有一篇文章模型,表單,視圖。 該文章的模型中有用戶字段,related_name爲「標記」。 現在,我想隱藏用戶在Django模板中創建的文章, 我該怎麼做到這一點?比較Django模板中的用戶相關對象

喜歡的東西:

{% if tag in articles %} 

更新 這是我的看法是@andi要求:

class Tagging(LoginRequiredMixin, generic.DetailView): 

def get(self, request, *args, **kwargs): 
    cat = self.kwargs.get('cat') 
    print(cat) 
    queryset_list = Article.objects.all().filter(category=cat) 

    paginator = Paginator(queryset_list, 1) 
    page_request_var = "page" 
    page = request.GET.get(page_request_var) 
    try: 
     queryset = paginator.page(page) 
    except PageNotAnInteger: 
     queryset = paginator.page(1) 
    except EmptyPage: 
     queryset = paginator.page(paginator.num_pages) 
    context = { 
     'articles': queryset, 
     'page_request_var': page_request_var, 
    } 

    return render(request, 'users/tagging.html', context) 

我的模型

這些模型的兩個來自不同應用

TaggedArticle型號:

choices = (
    ('yes', 'Yes'), 
    ('no', 'No'), 
    ('not sure', 'Not Sure'), 
) 

class TaggedArticle(models.Model): 
    user = models.ForeignKey(User, related_name='tagging') 
    category_fit = models.CharField(choices=choices, max_length=255) 
    article = models.ForeignKey(Article, related_name='articles') 
    relevant_feedback = models.TextField(blank=True) 
    created_at = models.DateTimeField(default=timezone.now, editable=False) 

文章型號:

class Article(models.Model): 
    link = models.URLField(max_length=255) 
    category = models.CharField(max_length=255, choices=Categories) 

幫助,我請!

提前致謝!

回答

0

最好的方法是在視圖中通過篩選QuerySet將其進一步傳遞給模板。

+0

兩者都是獨立的對象如何我可以在視圖中做到這一點嗎?請! –

+0

@AbdulRehman顯示你的代碼有問題,我會提供幫助。它依賴於你使用基於類的視圖或基於功能的視圖。 – andi

0

您可以簡單地通過這樣的用戶排除的選項:

queryset_list = Article.objects.filter(category=cat).exclude(user=request.user) 

希望它能幫助!

+0

文章和標記文章是兩種不同的模型,當一篇文章被用戶標記,然後保存在一個新的模型中作爲TaggedArticle,現在我需要隱藏標記文章在我的模板中。如果我有這兩個查詢(Article& TaggedArticle模型)在視圖中,並作爲模板的上下文傳遞,但在模板中,如果它在TaggedArticle中,我該如何隱藏文章? –

+0

@AbdulRehman發佈你的模特請 –

0

最後回答:忘了回覆聲明!

您有幾種選擇:

  • Article.objects.filter(articles__is_null=True)在替代@JahongirRamanov的解決方案,如果你如果你想在模板中,只有整個查詢集不需要整個查詢集模板
  • 「隱藏」 在它:你需要一個不同的環境,也許服用點,如:

    # models.py 
    class Article(models.Model): 
        ... 
        def is_from_request_user(self, request): 
          return TaggedArticle.objects.filter(article=self, user=request.user).exists() 
    
    # views .py 
        def get(self, request, *args, **kwargs): 
         ... 
         context = { 
           "articles" = [{"object": article, "from_user": article.is_from_request_user(request)} for article in queryset], 
           ..., 
          } 
    
        # in template 
    
        {% for article in articles %} 
         {% if not article.from_user %} 
         ... 
         {% endif %} 
        {% endfor %} 
    

希望它有幫助!

+0

嗨@efkin!感謝您的回答,但它不起作用,我在{%if not ...%}消息中顯示了一條消息{%endif%}它顯示了所有文章的消息。 –

+0

剛剛更新了答案,我忘記了'is_from_request_user()'方法中的return語句-_- – efkin

0

我已經通過在TaggedArticle模型中添加鏈接字段來管理它,然後比較模板中兩個模型的鏈接字段並獲得所需結果。

這裏是我的更新TaggedArticle型號:

choices = (
    ('yes', 'Yes'), 
    ('no', 'No'), 
    ('not sure', 'Not Sure'), 
) 

class TaggedArticle(models.Model): 
    user = models.ForeignKey(User, related_name='tagging') 
    category_fit = models.CharField(choices=choices, max_length=255) 
    article = models.ForeignKey(Article, related_name='articles') 
    link = models.URLField(max_length=255,) 
    relevant_feedback = models.TextField(blank=True) 
    created_at = models.DateTimeField(default=timezone.now, editable=False) 

這裏是我的最新觀點:

class Tagging(LoginRequiredMixin, generic.DetailView): 

def get(self, request, *args, **kwargs): 
    cat = self.kwargs.get('cat') 
    print(cat) 
    queryset_list = Article.objects.all().filter(category=cat) 
    tagged = TaggedArticle.objects.all().filter(user=request.user) 
    paginator = Paginator(queryset_list, 1) 
    page_request_var = "page" 
    page = request.GET.get(page_request_var) 
    try: 
     queryset = paginator.page(page) 
    except PageNotAnInteger: 
     queryset = paginator.page(1) 
    except EmptyPage: 
     queryset = paginator.page(paginator.num_pages) 
    context = { 
     'articles': queryset, 
     'page_request_var': page_request_var, 
     'tagged': tagged, 
    } 

    return render(request, 'users/tagging.html', context) 

這裏就是我在模板做了:

{% for art in articles %} 
    {% for tag in tagged %} 
      {% if tag.link in art.link %} 
      <h2>Already Tagged</h2> 
      {% endif%} 
    {% endfor %} 
{% endfor %}