Использование модели Muliple с представлением на основе классов Django 2.0 - PullRequest
2 голосов
/ 26 апреля 2020

Я создаю приложение для управления складом, в котором мне нужно было передать несколько моделей в представления на основе классов. Например, у меня есть список всех заказов с продуктом и статусом выполнения. Но я не могу передать несколько моделей из моего представления на основе классов для отображения и использовать в моем шаблоне модель моего заказа

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

1 Ответ

1 голос
/ 26 апреля 2020

Если вы используете 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
...