Django - Как я могу отображать правильные данные из похожих объектов внутри вложенного цикла for из моего шаблона? - PullRequest
0 голосов
/ 25 октября 2018

Внутри моего DetailView у меня есть 3 очень похожих объекта с небольшими различиями в фильтруемом объекте.

# views.py
def get_context_data(self, **kwargs):    

    # all sales for all line items (products) with a specified title
    sales = Sales.objects.filter(publication__title=self.object)

    # filters print sales for a specified title
    print_sales = Sales.objects.filter(publicaton__title=self.object, line_item=1) 

    # filters digital sales for a specified title
    digital_sales = Sales.objects.filter(publicaton__title=self.object, line_item=2) 

В идеале я хотел бы отобразить таблицу, в которой все продажи разделены по продуктам и месяцам, например:

| Month           | Print Sales | Digital Sales |
| --------------- | ----------- | ------------- |
| January         | 2,000       | 3,000         |
| February        | 1,000       | 2,000         |
| --------------- | ----------- | ------------- |
| Total:          | 3,000       | 5,000         |
| Combined Total: |             | 8,000         |

Однако я не смог выяснитьспособ правильно отформатировать таблицу и предоставить правильные отфильтрованные данные в моем шаблоне.Приведенный ниже фрагмент отображает правильно отформатированную таблицу (аналогично приведенной выше), но с объединенными данными о продажах, отображаемыми за каждый месяц.дизайн таблицы.

Вот сокращенная версия моих моделей:

# models.py

class LineItem(models.Model):
    name = models.CharField(...) # print sales, digital sales... 
    ...

class Publication(models.Model):
    title = models.CharField(...)
    ...  

class Sales(models.Model):
    publication = models.ForeignKey(Publication, ...)
    issue = models.ForeignKey(Issue, ...)  # gets each month from the Issue model
    line_item = models.ForeignKey(LineItem, ...)
    net_sales = models.DecimalField(...)
    ...

Что я могу изменить в своем шаблоне или представлении, что будет лучшим подходом для решения этой проблемы?

1 Ответ

0 голосов
/ 26 октября 2018

Вы используете для цикла

 {% for item in sales %}

, в результате чего и print_sales, и цифровые продажи выполняются два раза.Здесь они оба могут извлекать только один объект каждый.попробуйте это:

 {% for item in sales %}
   <tr>
   <td>{{ item.issue }}</td>
   </tr>
  {% endfor %}
{% for obj in print_sales %}
  <tr>
  <td>{{ obj.net_sales}}</td></tr>
{% endfor %}
{% for obj in digital_sales%}
   <tr> <td>{{ obj.net_sales}}</td></tr>
{% endfor %}
...