如何在Django中正确显示ManyToMany ID匹配列表?

时间:2015-06-23 16:00:09

标签: python django

如何正确显示ManyToMany ID匹配列表?

我的报告清单(每周,每月等):

Car Number 1:
-customer (date, name etc) 
-customer (date, name etc)

Car Number 2:    
-customer (date, name etc) 
-customer (date, name etc) 

我的模特:

class Car(models.Model):
    name ...

class Reservation(model.Models):
    cars = models.ManyToManyField('Car', related_name="reservation")
    customerinfo = ...

由于每个客户可以预订多辆车,我必须使用M2M领域。

现在显示列表:

{% for car in cars %}
<h1>{{ car.name }}</h1>
    {% for reservation in reservations %}
        {% for reservationcar in reservation.cars.all %}
            {% if reservationcar.id = car.id %}
                <h2>{{ reservation.cusotmerinfo }}</h2>
            {% endif %}
        {% endfor %}
    {% endfor %}
{% endfor %}

现在,上述工作,但看起来不对,看起来很脏。

是否有更好,更清洁,更短的方法来实现这一目标?

2 个答案:

答案 0 :(得分:1)

在views.py中执行查询并将生成的查询集添加到视图的上下文中会更快。或者使用related_name反向。还有建议通表。您应该尽量减少模板中的所有操作以提高性能。那么在python中真正的'数学'(例如在视图类中)。

在评论中给出的示例中: https://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany

  • person是客户
  • group is the car
  • 会员资格是预订

答案 1 :(得分:1)

M-M&#34;错误&#34;您可以使用this 它看起来像这样(未经测试)

class User(models.Model):
    .. any data you need ..

class Car(models.Model):
    .. any data you need ..
    reservations = models.ManyToManyField(User, through='Reservations')


class Reservations(models.Model):
    car = models.ForeignKey(Car)
    user = models.ForeignKey(User)
    .. any data you need ..

您可以将预订放在用户中并更改参考号。