Python Django:如何显示数据库中登录的用户数据
我正在开发一个发票管理系统,用户可以在其中添加发票数据,并将其保存在数据库中,每当用户登录时,数据都会显示在主页上。但是,如果任何用户登录主页时也显示其他用户的数据,但我只需要活动用户的数据,则会出现问题。你们能帮帮我吗 这是我的主页,你可以看到我是通过用户1登录的,但在主页上也会显示用户2的数据 这是我的密码 views.pyPython Django:如何显示数据库中登录的用户数据,python,html,django,sqlite,Python,Html,Django,Sqlite,我正在开发一个发票管理系统,用户可以在其中添加发票数据,并将其保存在数据库中,每当用户登录时,数据都会显示在主页上。但是,如果任何用户登录主页时也显示其他用户的数据,但我只需要活动用户的数据,则会出现问题。你们能帮帮我吗 这是我的主页,你可以看到我是通过用户1登录的,但在主页上也会显示用户2的数据 这是我的密码 views.py from django.shortcuts import render from django.contrib.auth.mixins import LoginRe
from django.shortcuts import render
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.views.generic import (
ListView,
DetailView,
CreateView,
UpdateView,
DeleteView
)
from .models import Invoicelist
def home(request):
context = {
'invoices': Invoicelist.objects.all()
}
return render(request, 'invoicedata/home.html', context)
class InvoiceListView(ListView):
model = Invoicelist
template_name = 'invoicedata/home.html' # <app>/<model>_<viewtype>.html
context_object_name = 'invoices'
class InvoiceDetailView(DetailView):
model = Invoicelist
class InvoiceCreateView(LoginRequiredMixin, CreateView):
model = Invoicelist
fields = ['issuer','invoice_number','date','amount','currency','other']
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
class InvoiceUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
model = Invoicelist
fields = ['issuer','invoice_number','date','amount','currency','other']
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
def test_func(self):
invoice = self.get_object()
if self.request.user == invoice.author:
return True
return False
class InvoiceDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
model = Invoicelist
success_url = '/'
def test_func(self):
invoice = self.get_object()
if self.request.user == invoice.author:
return True
return False
def about(request):
return render(request, 'invoicedata/about.html', {'title': 'About'})
home.html
{% extends "invoicedata/base.html" %}
{% block content %}
{% for invoice in invoices %}
<article class="media content-section">
<div class="media-body">
<div class="article-metadata">
<h2><a class="article-title" href="{% url 'invoice-detail' invoice.id %}">{{ invoice.issuer }}</a></h2>
</div>
<p class="article-content">{{ invoice.invoice_number }}</p>
<p class="article-content">{{ invoice.date }}</p>
<p class="article-content">{{ invoice.amount }}</p>
<p class="article-content">{{ invoice.currency }}</p>
<p class="article-content">{{ invoice.other }}</p>
<div class="article-metadata">
<small class="text-muted">{{ invoice.author }}</small>
</div>
</div>
</article>
{% endfor %}
{% endblock content %}
{%extends“invoicedata/base.html”%}
{%block content%}
{发票%中发票的%s}
{{invoice.invoice\u number}
{{invoice.date}
{{invoice.amount}
{{invoice.currency}
{{invoice.other}
{{invoice.author}
{%endfor%}
{%endblock内容%}
发票列表_deatil.html
{% extends "invoicedata/base.html" %}
{% block content %}
<article class="media content-section">
<img class="rounded-circle article-img" src="{{ object.author.profile.image.url }}">
<div class="media-body">
<div class="article-metadata">
<a class="mr-2" href="#">{{ object.author }}</a>
<small class="text-muted">{{ object.date }}</small>
{% if object.author == user %}
<div>
<a class="btn btn-secondary btn-sm mt-1 mb-1" href="{% url 'invoice-update' object.id %}">Update</a>
<a class="btn btn-danger btn-sm mt-1 mb-1" href="{% url 'invoice-delete' object.id %}">Delete</a>
</div>
{% endif %}
</div>
<h2 class="article-issuer">{{ object.issuer }}</h2>
<p class="article-invoice_number">{{ object.invoice_number }}</p>
<p class="article-date">{{ object.date }}</p>
<p class="article-amount">{{ object.amount }}</p>
<p class="article-currency">{{ object.currency }}</p>
<p class="article-other">{{ object.other }}</p>
</div>
</article>
{% endblock content %}
{%extends“invoicedata/base.html”%}
{%block content%}
{{object.date}
{%if object.author==user%}
{%endif%}
{{object.issuer}
{{object.invoice\u number}
{{object.date}
{{object.amount}
{{object.currency}
{{{object.other}
{%endblock内容%}
您必须覆盖列表视图上的get_queryset()
,例如,仅包括所需用户的发票。(您还需要在“更新”视图上执行此操作,以避免用户能够编辑彼此的发票。)
另一方面,除非模型的单个实例实际表示发票列表,否则您的模型应称为发票
class InvoiceListView(ListView):
model = Invoicelist
template_name = 'invoicedata/home.html'
context_object_name = 'invoices'
def get_queryset(self):
return self.model.objects.all().filter(issuer=self.request.user)
嘿,AKX感谢你们的快速响应,实际上更新视图工作正常,但列表视图出现问题,建议的解决方案不起作用,我试过了,但现在它没有显示任何内容。顺便说一句,我已经添加了更新页面,您可以将其签出您的创建视图集
author
;在这种情况下,你会想过滤(author=self.request.user)
,当然。嘿,谢谢你的工作,但是当我从所有用户注销时,主页会给我一个错误“TypeError at/'AnonymousUser'object is not iterable”“'AnonymousUser'是用户未登录时请求使用的默认用户。您应该在get\u queryset()
中添加if request.user.is\u authenticated
子句,如果用户未登录,只需返回一个空列表[]
@alexherez,最好是self.model.objects.none()
,在这种情况下,它也是一个查询集。
class InvoiceListView(ListView):
model = Invoicelist
template_name = 'invoicedata/home.html'
context_object_name = 'invoices'
def get_queryset(self):
return self.model.objects.all().filter(issuer=self.request.user)