gpt4 book ai didi

django - 如何在 Django 通用 View 中添加额外的上下文和查询集字段?

转载 作者:行者123 更新时间:2023-12-02 05:46:11 24 4
gpt4 key购买 nike

我正在构建 Django 应用程序,具有提交链接和投票功能。

我想显示用户详细信息页面中用户投票的所有链接。我可以使用以下命令在 python shell 中检索它们:

Link.objects.filter(votes__voter=user)

但我不知道如何将其作为额外的上下文字段添加到 View 中。代码如下:

模型.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')
...

View .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 实现添加额外字段关联。我不知道我需要定义新的查询集,定义新的对象或只是指向一个新的上下文。如果您能为我阐明这一点,我将不胜感激。

最佳答案

您只需重写 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

关于django - 如何在 Django 通用 View 中添加额外的上下文和查询集字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32932056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com