如何在django中的视图中使用多个模型实例?

时间:2015-10-10 02:11:03

标签: django

我创建了一个网站,当用户上传图像时,我会检测该图像上的对象并显示它们。所以这是我的模型:

class Document(models.Model):
    docfile = models.FileField(upload_to='documents/%Y/%m/%d')
    imgfile = models.FileField(upload_to='documents/%Y/%m/%d',default='settings.MEDIA_ROOT/default/default.jpg')
    catagory = models.CharField(max_length=100,default="unknow")

docfile是原始图像,imgfile是我在图像中标记对象的图像,catagory是对象的类别。

我的问题是图像中可能有多个对象,因此我的视图中可能有多个Document实例,但我不确切地知道我需要提前多少个实例,因为这取决于检测结果。

那么我该如何实现呢?如果我可以在视图中使用文档列表,如何在我的html模板中显示此列表中的内容? THX。

2 个答案:

答案 0 :(得分:1)

您可以稍微更改模型:

class BaseImage(models.Model):
    docfile = models.FileField(upload_to='documents/%Y/%m/%d')
class Document(models.Model):
    base_image = models.ForeignKey(BaseImage)
    imgfile = models.FileField(upload_to='documents/%Y/%m/%d',default='settings.MEDIA_ROOT/default/default.jpg')
    catagory = models.CharField(max_length=100,default="unknow")

通过这种方式,您可以查询从基本图像中提取的所有对象:

my_image = BaseImage.objects.get(pk=some_id)
my_extracted_objects = my_image.document_set.all()

然后在您的视图中可以在您的上下文和模板中显示每个查询集:

{% for document_object in my_extracted_objects %}
    <img src="{{ MEDIA_URL }}{{ document_object.imgfile.url }}">
{% endfor %}

如果我遗漏了某些内容或误解了这个问题,请告诉我。

答案 1 :(得分:0)

正如@ cdvv7788所说,我做了一些改动: 在我的观点中,我使用:

my_images = Document.objects.filter(base_image=newdoc.id)

其中newdoc是BaseImage实例,即用户上传的图像。

在我的html模板中,我有以下代码列出所有检测结果:

{%for image in my_images%}
    <img src="{{image.imgfile.url}}">
{%endfor%}