在基于 Class 的 View Django 2.0 中使用多模型

Using Muliple Model with Class based View Django 2.0

我正在构建一个仓库管理应用程序,我需要在其中将多个模型传递给基于 class 的视图。例如,我有一个包含产品和履行状态的所有订单的列表。但是我无法从基于 class 的视图中传递多个模型以在我的模板中显示和使用 我的订单型号

class Order(models.Model):
    Order_id = models.IntegerField(primary_key=True)
    Product = models.ManyToManyField(Product)
    Shipping_addreess_1 = models.CharField(max_length=1000, blank=False)
    Shipping_addreess_2 = models.CharField(max_length = 1000,blank= True)
    Shipping_addreess_3 = models.CharField(max_length=1000, blank=True)
    Pin_Code = models.IntegerField(blank=False)
    City = models.CharField(max_length=256, blank=True)
    State = models.CharField(max_length=256, blank=False)
    Order_date = models.DateField
    Order_status = models.CharField(choices = order_status,max_length=2)
    Payment_method = models.CharField(choices = Payment_type,max_length=3)

我的产品型号

class Product(models.Model):
    SKU = models.CharField(max_length=365, unique=Tr)
    product_title = models.CharField(max_length=1000, blank = False)
    FSN = models.CharField(max_length=365,blank=True)
    Listing_ID = models.CharField(max_length=100, blank=True)
    ASIN = models.CharField(max_length=1000, blank=True)
    Price = models.IntegerField(blank=False)
    Product_category = models.CharField(max_length=256) #poster,t-shirt,notebook

    def __str__(self):
        return self.product_title

我尝试通过 get_context_data 方法。正如这里的一些答案中提到的那样。

Views.py

class OrderListView(ListView):
    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        context['order'] = Order.objects.all()
        context['Product'] = Product.objects.all()
        return context

但是我得到了错误。

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/orders/

Django Version: 2.2
Python Version: 3.6.9
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'orders']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/home/cisco/.local/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/home/cisco/.local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  115.                 response = self.process_exception_by_middleware(e, request)

File "/home/cisco/.local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/cisco/.local/lib/python3.6/site-packages/django/views/generic/base.py" in view
  71.             return self.dispatch(request, *args, **kwargs)

File "/home/cisco/.local/lib/python3.6/site-packages/django/views/generic/base.py" in dispatch
  97.         return handler(request, *args, **kwargs)

File "/home/cisco/.local/lib/python3.6/site-packages/django/views/generic/list.py" in get
  142.         self.object_list = self.get_queryset()

File "/home/cisco/.local/lib/python3.6/site-packages/django/views/generic/list.py" in get_queryset
  39.                     'cls': self.__class__.__name__

Exception Type: ImproperlyConfigured at /orders/
Exception Value: OrderListView is missing a QuerySet. Define OrderListView.model, OrderListView.queryset, or override OrderListView.get_queryset().

那么我怎样才能不仅在 Listview 中而且在 Detailview 和 Updateview 中做到这一点

如果您使用 ListView、DetailView 或 UpdateView,则必须设置模型或方法 get_queryset。

尝试以下操作,您的订单对象将在名称为 object_list 的模板中可用。

class OrderListView(ListView):
    model = Order

    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        context['products'] = Product.objects.all()
        return context