Her*_*aaf 5 django django-models django-forms
我有以下型号:
class Listing(models.Model):
name = models.CharField(max_length=50, verbose_name="Title")
images = models.ManyToManyField('Image')
Run Code Online (Sandbox Code Playgroud)
,ManyToManyField链接到这个Image类:
class Image(models.Model):
thumb = ImageField(upload_to='images/uploads/')
number = models.PositiveSmallIntegerField()
Run Code Online (Sandbox Code Playgroud)
和相应的ModelForm一样:
class ListingEditForm(ModelForm):
image1 = ImageField(required=False, label="Photo 1")
image2 = ImageField(required=False, label="Photo 2")
image3 = ImageField(required=False, label="Photo 3")
class Meta:
model = Listing
exclude = ('images')
Run Code Online (Sandbox Code Playgroud)
我们的想法是不限制可以与Listing后端中的a关联的图像数量,但此时我只需要表单中的3个图像.上传图像工作正常,但是如何将表单绑定到Listing实例,以便在查看编辑表单时图像不是"无"?
显然,这不会单独工作,因为image1,image2和image3仅表单域,而不是模型的一部分:
form = forms.ListingEditForm(instance=listing)
Run Code Online (Sandbox Code Playgroud)
因此,添加字典作为第一个参数似乎是显而易见的事情:
form = forms.ListingEditForm({'image1': ...},instance=listing)
Run Code Online (Sandbox Code Playgroud)
但它的价值应该...是什么?我如何从Listing实例中检索它?
我会回答我自己的问题,尽管这并不完全是我正在寻找的答案。我环顾四周,据我所知,HTML 中没有可靠的方法来更改文件输入字段的内容。所以,我可能是错的,但即使您随请求发送该信息,Django 也无法在该字段中显示该信息(因为它与本地 PC 上的文件不对应)。
因此,我的解决方案只是将图像的 url 与请求一起发送,就像通常那样:
return render_to_response('edit.html', {'image1': image1_url, ...})
Run Code Online (Sandbox Code Playgroud)
然后,如果存在此信息,我将使用 jQuery 将图像放置在模板中的文件输入字段旁边,并在用户选择新文件时更新它。这不是最好的,但它确实有效。
我仍然很高兴听到任何其他解决方案。
| 归档时间: |
|
| 查看次数: |
1358 次 |
| 最近记录: |