Задать вопрос
filmincer
@filmincer

Как в Model Manager передать каждый рабочий объект из ListView?

Здравствуйте! Надеюсь на вашу помощь.
Есть сайт для посуточной аренды. Делаю страницу для сотрудников, где отображаются заказы.

В шаблоне:
{% for order in order_list %}
<p>Дата заказа: {{ order.timestamp }}</p>
<p>Юзер: {{ order.user.email }}</p>
        {% for item in order.cart.items.all %}
		        <li>{{ item.get_title }} <b>{{ item.rentdate_set.get_cart_dates }}</b></li>
        {% endfor %}
{% endfor %}


У каждого item в корзине, есть даты на которые его арендуют.
Хочу вывести даты отфильтрованные по корзине.Для этого для модели RentDate я написал метод в Model.Manager get_cart_dates:

class RentDateManager(models.Manager):
	...
	def all(self, *args, **kwargs):
		return self.get_queryset()

	def get_cart_dates(self, instance):
		cart_dates = self.get_queryset().filter(cart=instance.cart)
		return cart_dates

class RentDate(models.Model):
	startCar = models.DateField(blank=True, null=True)
	endCar = models.DateField(blank=True, null=True)
	user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True)
  variation = models.ForeignKey('Variation', null=True, blank=True)
	cart = models.ForeignKey(Cart, null=True, blank=True)
	
	objects = RentDateManager()

Такое view:
class StaffOrderList(StaffRequiredMixin, ListView):
	model = Order
	queryset = Order.objects.all()
	template_name = "staff_order_list.html"

	def get_queryset(self):
		queryset = super(StaffOrderList, self).get_queryset().order_by('-timestamp')
		return queryset


	def get_context_data(self, *args, **kwargs):
		context = super(StaffOrderList, self).get_context_data(*args, **kwargs)
		return context

Тут я понял, что абсолютно не знаю как собственно передать instance из шаблона(или вызвать из другого места). Такие вещи получались в DetailView, но в ListView я застрял.

Заранее благодарен за любую помощь.
  • Вопрос задан
  • 220 просмотров
Подписаться 1 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 1
Проще написать метод у Item'a

class CardItem(models.Model):
    ....

    def get_rent_dates(self):
         return RentDate.objects.filter(cart=self.cart)


{% for item in order.cart.items.all %}
            {{ item.get_rent_dates }}
  {% endfor %}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы