2

我正在構建Django應用程序,提交鏈接和投票功能。如何在Django通用視圖中添加額外的上下文和查詢集字段?

我想顯示所有鏈接,由用戶在用戶詳細信息頁面投票。我可以用這個在Python Shell檢索它們:

Link.objects.filter(votes__voter=user) 

但我不知道如何這是一個額外的上下文字段添加到視圖。下面是代碼:

models.py

class Link(models.Model): 
    title  = models.CharField(max_length=200) 
    submitter = models.ForeignKey(User) 
    submit_date = models.DateTimeField(auto_now_add=True) 
    up_votes = models.IntegerField(default=0, blank=True, db_index=True) 
    ... 

class UserProfile(models.Model): 
    user  = models.OneToOneField(User, unique=True) 
    ... 

class Vote(models.Model): 
    voter = models.ForeignKey(User) 
    link = models.ForeignKey(Link, related_name='votes') 
    ... 

views.py

class UserProfileDetailView(DetailView): 
    model  = get_user_model() 
    slug_field = "username" 
    template_name = "user_detail.html" 


    def get_object(self, queryset=None): 
     user = super(UserProfileDetailView, self).get_object(queryset)s 
     UserProfile.objects.get_or_create(user=user) 
     return user 

user_detail.html

... 
{% if object == request.user and request.user.is_authenticated %} 
    <p><a href='{% url "edit_profile" %}'>Edit My Profile</a></p> 
{% endif %} 

{% if link in voted_list %} 
    <p><a href='{% url "link_detail" %}'>{{ link.title }}</a></p> 
{% endif %} 
... 

我無法弄清楚如何實施增加額外的字段根據this鏈接。我不知道我需要定義新的查詢集,定義新的對象或者只是指向一個新的上下文。如果你能爲我點亮這個點,我會更加讚賞。

+1

基於類視圖時使用此作爲一個快速參考:http://ccbv.co.uk/ – cdvv7788

回答

6

您可以覆蓋UserProfileDetailView中的get_context_data()函數來添加額外的上下文。

在這裏,我們將添加一個額外的變量voted_links,其中包含當前用戶投票的所有鏈接。

class UserProfileDetailView(DetailView):  

    def get_context_data(self, **kwargs): 
     context = super(UserProfileDetailView, self).get_context_data(**kwargs) # get the default context data 
     context['voted_links'] = Link.objects.filter(votes__voter=self.request.user) # add extra field to the context 
     return context 
相關問題