django特定的用户内容/数据

时间:2017-08-30 03:01:01

标签: python django

我正在尝试根据登录用户显示特定内容/数据。我想只显示他们的信息。这就是我尝试过但我无法让它发挥作用。

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 %}

我觉得我很亲密。我错过了什么?

3 个答案:

答案 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)