Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:如何显示数据库中登录的用户数据_Python_Html_Django_Sqlite - Fatal编程技术网

Python Django:如何显示数据库中登录的用户数据

Python 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

我正在开发一个发票管理系统,用户可以在其中添加发票数据,并将其保存在数据库中,每当用户登录时,数据都会显示在主页上。但是,如果任何用户登录主页时也显示其他用户的数据,但我只需要活动用户的数据,则会出现问题。你们能帮帮我吗

这是我的主页,你可以看到我是通过用户1登录的,但在主页上也会显示用户2的数据

这是我的密码

views.py


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)