在基于 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
我正在构建一个仓库管理应用程序,我需要在其中将多个模型传递给基于 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