我正在尝试根据登录用户显示特定内容/数据。我想只显示他们的信息。这就是我尝试过但我无法让它发挥作用。
views.py
class DemoView(TemplateView):
template_name = 'demographics/demographics.html'
def get(self, request):
demos = Demographics.objects.filter(user=request.user)
context = {
'demos': demos,
}
return render(request, self.template_name, context)
models.py
class Demographics(models.Model):
first_name = models.CharField(max_length=50, null=True)
middle_name = models.CharField(max_length=50, null=True)
last_name = models.CharField(max_length=50, null=True)
user = models.ForeignKey(User, null=True)
HTML
{% if demos %}
{% for demographics in demos %}
<p>First Name</p> {{ demographics.first_name }}
{% endfor %}
{% else %}
<h3>you dont have demo yet</h3>
{% endif %}
我觉得我很亲密。我错过了什么?
答案 0 :(得分:0)
完整答案:
Views.py
class DemoView(TemplateView):
template_name = 'demographics/demographics.html'
def get(self, request, *args, **kwargs):
demos = Demographics.objects.filter(user=User.objects.get (username=request.user))
context = {
'demos': demos,
}
return render(request, self.template_name, context)
HTML:
{% if demos %}
{% for demographics in demos %}
<p>First Name</p> {{ demographics.first_name }}
{% endfor %}
{% else %}
<h3>you dont have demo yet</h3>
{% endif %}
urls.py
url(r'^test/', views.DemoView.as_view()),
admin.py
admin.site.register(Demographics)
models.py
class Demographics(models.Model):
first_name = models.CharField(max_length=50, null=True)
middle_name = models.CharField(max_length=50, null=True)
last_name = models.CharField(max_length=50, null=True)
user = models.ForeignKey(User, null=True)
转到django admin,检查您的对象,并确保您已登录到与其关联的人口统计对象的帐户。
以上设置对我有用,如果它不适合您,您很可能以没有任何人口统计对象的用户身份登录。
另外,不要将模型命名为复数,它应该是人口统计学,因为它是一个对象的表示。在视图中过滤时,将变量命名为人口统计(复数),因为查询会返回多个对象。
答案 1 :(得分:0)
我认为使用pdb
进行调试将有助于get无法正确呈现数据,但如果您知道django templateview
类如何处理上下文数据,则必须稍微修改一下代码。在这里,我使用了get_context_data
而不是get
,希望这次它能够正常运行。
class DemoView(TemplateView):
template_name = 'demographics/demographics.html'
def get_context_data(self, **kwargs):
context = super(DemoView, self).get_context_data(**kwargs)
demos = Demographics.objects.filter(user=self.request.user)
context['demos'] = demos
return context
您还可以检查表Demographics
是否包含所选用户的数据。
答案 2 :(得分:0)
我认为问题可能是您要从查询集中过滤掉所有答案,因为request.user的内容与“用户”对象不完全匹配。我不知道他们为什么不匹配,但在我的代码中我使用:
User.objects.get(username = request.user.username)