Rob*_*Rob 3 forms django image inline-formset
我有一个列表模型和一个照片模型:
class Listing(models.Model):
title = models.CharField(max_length=255)
<more fields>...
class Photo(models.Model):
image = models.ImageField(upload_to=create_file_path)
listing = models.ForeignKey(Listing, related_name='photos')
Run Code Online (Sandbox Code Playgroud)
我正在使用 CBV、UpdateView 来编辑列表。我正在使用这个表格:
class ListingDetailForm(forms.ModelForm):
class Meta:
model = Listing
exclude = []
Run Code Online (Sandbox Code Playgroud)
以及 forms.py 中的内联表单集,可以删除/更改图像:
PhotoFormset = inlineformset_factory(Listing, Photo, fields='__all__', extra=1)
Run Code Online (Sandbox Code Playgroud)
这是我的观点:
PhotoFormset = inlineformset_factory(Listing, Photo, fields='__all__', extra=1)
Run Code Online (Sandbox Code Playgroud)
以及相关的模板部分:
{% block body %}
<form action="" method="post">
{% csrf_token %}
{% for field in form %}
{{ field.errors }}
{{ field.label_tag }} {{ field }}<br><br>
{% endfor %}
{% for field in photo_form %}
{{ field.errors }}
{{ field.label_tag }} {{ field }}<br><br>
{% endfor %}
{{ photo_form.management_form }}
<input type="submit" value="Update" />
</form>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是:
1)如果列表中附有照片,通过管理员,如果我对照片表单不执行任何操作(例如仅更改列表模型中的字段),则照片表单不会通过验证。无效后重新加载页面时,照片表单不会显示任何错误。
2) 选择新照片不会更改当前照片,照片表单不会验证且不会显示任何错误。
3) 如果当前没有与列表相关的照片,则尝试通过表单添加一张照片进行验证,但实际上并未保存与该列表相关的照片。
如果列表中附有图像,则删除图像就可以了。删除图像并更新列表中的其他一些字段是有效的。如果没有图像更新,则仅列表字段有效。通过表单向列表添加第二张照片不起作用,并且不会显示任何表单错误。