从Django中的视图返回多个模型

时间:2016-04-20 06:46:10

标签: django django-models django-views

我正在学习Django,

我遇到了从具有相同视图的2个不同模型中获取数据的问题。

我的模型如下:

@python_2_unicode_compatible
class Destination(models.Model):
    roadtripname = models.CharField(max_length=100)
    def __str__(self):
        self.roadtripname

@python_2_unicode_compatible        
class Trajectories(models.Model):
    roadtripname = models.ForeignKey(Destination, on_delete=models.CASCADE)
    place_text = models.CharField(max_length=100)
    def __str__(self):
       return self.place_text

我的观点类是:

class IndexView(generic.ListView):
    template_name = 'roadtrip/index.html'
    context_object_name = 'roadtrip_list'

    def get_queryset(self):
        return Destination.objects.filter()

我的HTML是:

{% for roadtrip in roadtrip_list %}
    {{ roadtrip.roadtripname }} 
{% endfor %}

我试图像这样返回我的2个模型:

return Destination.objects.filter(), Trajectories.objects.filter()

然后在html中执行

{% for roadtrip in roadtrip_list[0] %}
    {{ roadtrip.roadtripname }} 
{% endfor %}

但这不起作用,我不知道如何能够访问Destination和Trajectories模型。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

  

我可以循环浏览第二组数据(轨迹)并保存在javascript数组中,当它等于选择值时。

可以,但这太可怕了,你只是打开自己,允许客户修改他们真正不需要的东西。

对于每个django多对多关系,你可以找到与_set相关的所有对象,所以只需保持你的初始get_queryset相同(返回目的地),然后获得每个对象的轨迹。

{% for roadtrip in roadtrip_list %}
    {% for trajectory in roadtrip.trajectories_set.all %}
          {# Use trajectories #}
    {% endfor %}
    {{ roadtrip.roadtripname }} 
{% endfor %}

*我知道可以在这里进行非常简单的优化以提高性能,但我故意不包括它们