我创建了一个网站,当用户上传图像时,我会检测该图像上的对象并显示它们。所以这是我的模型:
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。
答案 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%}