Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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 如何显示仅由登录用户上载的产品?_Python_Django_Listview_Authentication_Django Views - Fatal编程技术网

Python 如何显示仅由登录用户上载的产品?

Python 如何显示仅由登录用户上载的产品?,python,django,listview,authentication,django-views,Python,Django,Listview,Authentication,Django Views,这是我的问题,当一个用户登录时,他们可以看到其他用户上传的产品,但我试图显示当一个用户登录时,他们只能看到他们上传的产品** 视图.py from django.shortcuts import render, get_object_or_404, redirect from .forms import ProductForm from .models import Product from django.contrib.auth.models import User from django.

这是我的问题,当一个用户登录时,他们可以看到其他用户上传的产品,但我试图显示当一个用户登录时,他们只能看到他们上传的产品**

视图.py

from django.shortcuts import render, get_object_or_404, redirect
from .forms import ProductForm
from .models import Product
from django.contrib.auth.models import User
from django.db import models
from django.urls import reverse
from django.conf import settings 
from django.contrib.auth.models import User 

class Product(models.Model): 
    title = models.CharField(max_length=120) 
    description = models.TextField(blank=True, null=True)
    price = models.DecimalField(decimal_places=2, max_digits=10000)
    summary = models.TextField(blank=False, null=False)
    featured = models.BooleanField(default=False) 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.CASCADE)


    def get_absolute_url(self):
        return reverse("products:product-detail", kwargs={"id": self.id}) #f"/products/{self.id}/"
urlpatterns = [
    path('', product_list_view, name='product-list'),
    path('create/', product_create_view, name='product-create'),
    path('<int:id>/', product_detail_view, name='product-detail'),
    path('update/<int:id>/', product_update_view, name='product-update'),
    path('<int:id>/delete/', product_delete_view, name='product-delete'),
]
prodcut创建或上传

def product_create_view(request):
    form = ProductForm(request.POST or None)
    if form.is_valid():
        form.save()
        form = ProductForm()

    context = {
        'form': form
    }
    return render(request, "products/product_create.html", context)
产品更新

def product_update_view(request, id=id):
obj = get_object_or_404(Product, id=id)
form = ProductForm(request.POST or None, instance=obj)
if form.is_valid():
    form.save()
context = {
    'form': form
}
return render(request, "products/product_create.html", context)
def product_delete_view(request, id):
    obj = get_object_or_404(Product, id=id)
    if request.method == "POST":
        obj.delete()
        return redirect('../../')
    context = {
        "object": obj
    }

    return render(request, "products/product_delete.html", context)
尝试在列表视图中更改,但获取此错误产品\u list\u view()缺少1个必需的位置参数:“user”

def product_list_view(request, user):

    queryset = Product.objects.filter(user=request.user) 

    context = {
        "object_list": queryset
        }
    return render(request, "products/product_list.html", context)
**产品详情**

def product_detail_view(request, id):
    obj = get_object_or_404(Product, id=id)
    context = {
        "object": obj
    }

    return render(request, "products/product_detail.html", context)
产品删除

def product_update_view(request, id=id):
obj = get_object_or_404(Product, id=id)
form = ProductForm(request.POST or None, instance=obj)
if form.is_valid():
    form.save()
context = {
    'form': form
}
return render(request, "products/product_create.html", context)
def product_delete_view(request, id):
    obj = get_object_or_404(Product, id=id)
    if request.method == "POST":
        obj.delete()
        return redirect('../../')
    context = {
        "object": obj
    }

    return render(request, "products/product_delete.html", context)
这是产品列表模板页面 模板/product.list.html

  {% extends 'accounts/base.html' %}

  {% block content %}

      {% for instance in object_list %}
          <p>{{ instance.id }} - <a href='{{ instance.get_absolute_url }}'>{{ instance.title }}</a></p>
       {% endfor %}

    {% endblock %}
url.py

from django.shortcuts import render, get_object_or_404, redirect
from .forms import ProductForm
from .models import Product
from django.contrib.auth.models import User
from django.db import models
from django.urls import reverse
from django.conf import settings 
from django.contrib.auth.models import User 

class Product(models.Model): 
    title = models.CharField(max_length=120) 
    description = models.TextField(blank=True, null=True)
    price = models.DecimalField(decimal_places=2, max_digits=10000)
    summary = models.TextField(blank=False, null=False)
    featured = models.BooleanField(default=False) 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.CASCADE)


    def get_absolute_url(self):
        return reverse("products:product-detail", kwargs={"id": self.id}) #f"/products/{self.id}/"
urlpatterns = [
    path('', product_list_view, name='product-list'),
    path('create/', product_create_view, name='product-create'),
    path('<int:id>/', product_detail_view, name='product-detail'),
    path('update/<int:id>/', product_update_view, name='product-update'),
    path('<int:id>/delete/', product_delete_view, name='product-delete'),
]
urlpatterns=[
路径(“”,产品列表视图,name='product-list'),
路径('create/',product_create_view,name='product-create'),
路径(“/”,产品详细信息视图,name='product-detail'),
路径('update/',product_update_view,name='product-update'),
路径('/delete/',product_delete_视图,name='product-delete'),
]

创建或更新产品时,您从未在产品中设置登录用户:

def product_create_view(request):
    if request.method == 'POST':
        form = ProductForm(request.POST)
        if form.is_valid():
            form.instance.user = request.user
            form.save()
    form = ProductForm()
    context = {
        'form': form
    }
    return render(request, 'products/product_create.html', context)
在列表视图中,不应使用
user
作为参数:

def product_list_view(request):
    queryset = Product.objects.filter(user=request.user)
    context = {
        'object_list': queryset
    }
    return render(request, 'products/product_list.html', context)
附加备注

  • 通常在POST请求成功的情况下,您应该进行重定向,以便实现
  • 您可能希望使
    user
    列不可为NULL,因为现在如果不指定值,它将为NULL,并且您允许在没有用户的情况下构造产品
  • 请不要使用
    request.POST或None
    。POST请求可以是有效的,即使它是空的
  • 请不要自己编写URL,Django可以根据视图名称和参数值解析URL。如果您以后想重写URL,这会更安全;及
  • 您可能希望查看基于类的视图,如和。这些将减少样板逻辑的数量

  • 缩进对于python代码很重要。你能修改一下你的问题吗?请删除黑体字(黑体字应该用来强调问题的某些部分)。此外,请缩进您的代码。感谢您提出我的错误,以后我会处理的it@redwanabir:不用担心。下面是一些提示,可以问更好的问题:)这样下次,你会在更短的时间内得到更好的答案:)。非常感谢,它成功了!我会永远记住你的建议。