所以我有两个型号:Car and Picture。一辆车可能有多张照片。
现在我想使用列表视图显示所有车辆以及每辆车的一张图片,有人可以告诉我该怎么做? 以下是我的代码
# models.py
class Car(models.Model):
name = models.CharField(max_length=100)
class Picture(models.Model):
car = models.ForeignKey(Car,related_name='pictures')
picture = models.ImageField()
# views.py
class CarList(ListView):
model = Car
答案 0 :(得分:8)
列表视图有一个方法get_context_data。您可以将此覆盖为senf额外上下文到模板中。
def get_context_data(self,**kwargs):
context = super(CarList,self).get_context_data(**kwargs)
context['picture'] = Picture.objects.filter(your_condition)
return context
然后,在您的模板中,您可以根据需要访问picture
对象。
我想这可以解决你的问题。
答案 1 :(得分:2)
您可以使用模板中的car.pictures.all
直接访问每个Car对象的相关Picture对象。
所以你可以做点什么,
{% for car in objects %}
{{ car.name }}
{% if car.pictures.all %}<img src="{{ car.pictures.all.0.picture.url }}" />{%endif %}
{% endfor %}
如需了解更多信息,请阅读Related Objects。
答案 2 :(得分:1)
由于我想通过带有queryset的表单,因此以下方法对我有用。
def get_queryset(self):
return Men.objects.filter(your condition)
def get_context_data(self,**kwargs):
context = super(Viewname,self).get_context_data(**kwargs)
context['price_form']=PriceForm(self.request.GET or None)
return context
使用get_queryset(),您可以定义一个基本查询集,该基本查询集将由super()中的get_context_data()实现。