Django:尝试链接到其他模型ListView中的一个模型

时间:2018-02-05 19:04:56

标签: django listview

我想从餐厅模型中获取餐厅ID,并将其用于Lunchmenu列表视图中的href。真的不知道如何从这里前进。我在模板中尝试了“restaurants_list”的for循环,但并不真正了解如何从列表中只获取一个Id。

有没有办法在模板中执行此操作? 我应该以某种方式更改视图吗?

型号:

 class LunchMenu(models.Model):
            restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE)

 class Restaurant(models.Model):
            manager = models.ForeignKey(User, on_delete=models.CASCADE)
            restaurant_name = models.CharField(max_length=100)

列表视图:

class LunchMenuListView(ListView):
    template_name = "lunchmenus/lunchmenu_home.html"
    model = LunchMenu

    def get_context_data(self, **kwargs):
        context = super(LunchMenuListView, self).get_context_data(**kwargs)
        context["restaurants_list"] = Restaurant.objects.all()
        return context

模板:

<div class="row">
          {% for lunchmenu in lunchmenu_list %}
            <div class="col-lg-4 col-sm-6 portfolio-item">
                  <div class="card h-100">
                                <a href="/restaurants/{{restaurant.id}}"><img class="card-img-top" src="http://placehold.it/350x200" alt=""></a>
                    <div class="card-body">
                                <h4 class="card-title">
                    <a href="#">{{lunchmenu.restaurant}}</a>
                    </h4>
                                <p class="card-text">{{lunchmenu.description  | safe}}</p>
                    </div>
                  </div>
                </div>
        {% endfor %}
    </div>
{% endblock %}

1 个答案:

答案 0 :(得分:3)

为什么不简单地使用restaurant项的lunchmenu字段,如下所示:

<a href="/restaurants/{{ lunchmenu.restaurant.id }}">

请注意,以这种方式使用硬编码的网址不是最佳做法,您应该使用Django的内置url模板标记并使用命名路由,这将为您提供更强大的解决方案尊重你的网址方案的最终变化:

<a href="{% url 'restaurants:restaurant-detail' id=lunchmenu.restaurant.id %}">

(假设您的restaurants:restaurant-detail中定义了urls.py路由,其中​​restaurant.id为参数