我想展示一个对象列表,在数据展示过程中,我想过滤/修改这些对象的一个属性。类似于注解的东西,但我没有用注解来做。这些是模型
class Airline (models.Model):
name = models.CharField()
destinations = models.ManyToManyField("city")
customers = models.ManyToManyField("user")
class City (models.Model):
name = models.CharField()
country = models.CharField()
class User (models.Model):
name = models.CharField()
preferredDestinations = models.ManyToManyField("city")
我想,对于一个给定的用户,目前的航空公司的用户是客户的列表,并为每个航空公司目前的航空公司的目的地列表。但是,我不想显示所有的航空公司目的地,而只想显示用户首选的目的地。
例如,g,
Airline1.destinations=["New York", "London", "Paris", "Madrid]
Airline2.destinations=["Madrid", "Barcelona", "Rome", "Berlin", "London"]
User1.preferredDestinations=["Madrid", "Barcelona", "Paris"]
由于user 1是Airline 1和Airline 2的客户,我希望页面显示一个表,显示每个航空公司飞往哪个用户首选目的地。也就是说,我不想看到航空公司飞往的所有目的地,只想看到用户感兴趣的目的地:例如
Welcome User1!
These are your airlines that fly to your preferred destinations
Airline | Destination |
| -------- | -------- |
| Airline1 | Madrid |
| | Paris |
| -------- | -------- |
| Airline2 | Madrid |
| | Barcelona |
在视图中,我为用户获取一个查询集airlineSet = Airline.objects.filter(customers=user.id)
在模板中
{% for airline in airlineSet %}
<tr>
<td>
{{ airline.name }}
</td>
<td>
{% for city in airline.destinations.all %}
<li>
{{ city }}
</li>
{% endfor %}
</td>
</tr>
{% endfor %}
这显示了航空公司的所有目的地,但我需要一个子集,它是airline.destinations
和user.preferredDestinations
的交集
我试图获取子集并将其放入查询集airlineSet
中的对象的属性destination
中,但这实际上修改了原始的Airline对象,并扰乱了数据库。
我想用城市的子集在查询集中创建注解,但似乎它限制了你可以用注解添加的内容(count,max,mix)。我不知道如何添加这样的注解。
此外,在上面的例子中,我放了几个城市,但实际上对于航空公司和用户来说,它可以是一个相当长的城市数量,我想限制概述页面中显示的城市数量,不要过多地显示大城市列表,而是显示一个短列表(当我点击航空公司时,它会显示整个联盟)。
我在模板{% if city in preferredDestinations %}
中创建了交叉点,但这对限制城市数量有限制。
这是一个可以在View上实现的东西吗?
1条答案
按热度按时间lvjbypge1#
你能做的是
为了不显示太多的城市,我建议使用分页。