Как получить только самые новые строки из модели в django и показать их в виде таблицы?

views.py

 def inventory_display(request):
     if request.user.vendor == True and request.user.vendor_approval == True:
         vendor = CustomUser.objects.get(id=request.user.id)
         vendor_product = vendor.vendor_user.all()
         items = vendor_product[0].product_variants.all()
         return render(request, 'vendor/inventory_display.html',{'vendor_product':vendor_product, 'items':items})

Html

                   {% for product in vendor_product %}
                  {% for item in items %}
                    <tr>
                      <th scope="row">{{forloop.counter}}</th>
                      <td>{{product.created|date:"d-m-y"}}</td>
                      <td>{{product.edited|date:"d-m-y"}}</td>
                      <td>{{product.vendoruser}}</td>
                      <td><a href="{% url 'loomerang_admin:product_details' %}">{{product.product_id}}</a></td>
                      <td>{{item.item_num}}</td>
                      <td>{{item.variant_value}}</td>                       
                      <td>{{item.initial_stock}}</td>
                      <td>2</td>
                      <td>{{item.approval_status}}</td>
                      <td>{{item.approved_date|date:"d-m-y"}}</td>
                      <td>{{product.approved_by}}</td>
                    </tr>
                  {% endfor %}
              {% endfor %}

Я получаю данные из 3 различных моделей. Я получаю все данные из этих моделей каждый раз. Что если я хочу получать только самый новый ряд каждый раз, когда добавляется новый ряд? Пожалуйста, нужна помощь

добавьте это поле в вашу модель

created_at          = models.DateTimeField(auto_now_add=True)

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

ModelName.objects.all().order_by('-created_at')

Попробуйте добавить номер индекса в ваши представления:

def inventory_display(request):
     if request.user.vendor == True and request.user.vendor_approval == True:
         vendor = CustomUser.objects.get(id=request.user.id)
         vendor_product = vendor.vendor_user.all()[0] 
         items = vendor_product[0].product_variants.all()[0]
         return render(request, 'vendor/inventory_display.html',{'vendor_product':vendor_product, 'items':items})

И удалите цикл for из шаблона:

                <tr>
                  <th scope="row">1</th>
                  <td>{{vendor_product.created|date:"d-m-y"}}</td>
                  <td>{{vendor_product.edited|date:"d-m-y"}}</td>
                  <td>{{vendor_product.vendoruser}}</td>
                  <td><a href="{% url 'loomerang_admin:product_details' %}">{{product.product_id}}</a></td>
                  <td>{{items.item_num}}</td>
                  <td>{{items.variant_value}}</td>                       
                  <td>{{items.initial_stock}}</td>
                  <td>2</td>
                  <td>{{items.approval_status}}</td>
                  <td>{{items.approved_date|date:"d-m-y"}}</td>
                  <td>{{vendor_product.approved_by}}</td>
                </tr>
             

Вы можете получить последний вставленный элемент несколькими способами

методlast()

vendor = CustomUser.objects.last()

метод order_by()

vendor = CustomUser.objects.order_by('-id').first()

методlatest()

vendor = CustomUser.objects.latest('id')
Вернуться на верх