как я могу отфильтровать объекты модели, если только поле другой модели содержит определенное значение и эти две модели имеют внешние ключи - PullRequest
0 голосов
/ 03 марта 2019

У меня есть две модели: модель заказа

class Order(models.Model):
    truck = models.ForeignKey(Truck, on_delete=models.CASCADE, related_name='relation_truck',default=None)
    date= models.DateField()
    product=models.CharField(max_length=30)
    depot = models.CharField(max_length=10)
    volume = models.CharField(max_length=30, blank=True)
    volume_delivered = models.CharField(max_length=30, blank=True)
    order_status = models.CharField(max_length=50, blank=True)
    pub_date = models.DateTimeField(auto_now_add=True, blank=True)

и другая модель, загруженная моделью:

class Loaded(models.Model):
    order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name='relation_order',default=None)
    status = models.CharField(max_length=50, blank=True)

Я хочу подать объекты с order_status=Released и Loadedот модели Order на моей модели Loaded в представлениях, потому что у меня есть порядок внешнего ключа.

в моих взглядах у меня есть что-то вроде:

def loading(request):
    loaded =   Loaded.objects.filter(order__order_status__in=['Loaded', 'Released'])
    return render(request, 'loadings.html' , {'loaded':loaded})

и в моем html:

                                        <table id="datatable2" class="table order-column hover">
                                            <thead>
                                                <tr>
                                                    <th>Truck NO.</th>
                                                    <th>Date</th>
                                                    <th>Product</th>
                                                    <th>Volume</th>
                                                    <th>Volume @20</th>
                                                    <th>Depot</th>
                                                    <th>Driver</th>
                                                    <th>Driver Tel</th>
                                                    <th>Driver ID</th>
                                                    <th>Status</th>

                                                </tr>
                                            </thead>
                                            <tbody>
                                                {% for car in loaded %}
                                                  <tr class="gradeX">
                                                  <td>{{car.order.truck.truck_number}}</td>
                                                  <td>{{car.order.date}}</td>
                                                  <td>{{car.order.product}}</td>
                                                  <td>{{car.order.volume}}</td>
                                                  <td>{{car.order.volume_delivered}}</td>
                                                  <td>{{car.order.depot}}</td>
                                                  <td>{{car.order.truck.driver_name}}</td>
                                                  <td>{{car.order.truck.driver_phone_number}}</td>
                                                  <td>{{car.order.truck.driver_id_number}}</td>
                                                  <td><input type="checkbox" id="toggle-two"></td>


                                                    </tr>
                                                {% endfor %}
                                            </tbody>
                                        </table>

я хочу, чтобы заказы с order_status были загружены и получены только дляпоказать в моем loadings.html

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Сначала позвольте мне объяснить проблему, чтобы я мог убедиться, что я правильно понял проблему!

  • Заказ имеет иностранный грузовик
  • Загружен иностранный заказ

, что означает, что 1 заказ может содержать n загруженных элементов.

Вы хотите, чтобы все загруженные элементы имели order_status в Loaded или Released.

Django поиск отношения один ко многим

Если это то, чего вы хотите достичь, то

all_loaded_items = Loaded.objects.filter(order__order_status__in=['Loaded', 'Released'])

в аргументах фильтра после разделения имени аргумента на __

  • order - это внешнее поле
  • order_status - это поле в чужом поле
  • in - это оператор, похожий на mysql в операторе

Где all_loaded_items имеет тип QuerySet.

0 голосов
/ 03 марта 2019

Попробуйте это:

loaded_or_released = Loaded.objects.filter(Q(order__order_status='Loaded') | Q(order__order_status='Released') )[0:200]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...