如何从 InlineFormset 中的图像字段获取图像 URL?
How can I get an image URL from an image field in an InlineFormset?
我有以下型号:
class Event(models.Model):
name = models.CharField(max_length=128, null=True, blank=True)
class Picture(models.Model):
event = models.ForeignKey(Event)
image = models.ImageField(upload_to='media')
Picture
有一个 FK 到 Event
模型,所以当我想在表单中使用它们时(创建一个事件并向其添加图片),我使用内联表单集。
# Event form not important here
PictureFormSet = inlineformset_factory(
Event,
Picture,
min_num=1,
validate_min=True,
extra=1,
fields=(
'image',
),
can_delete=True,
)
当我创建活动和上传文件时,它们工作得很好。问题是当我想编辑事件时。我使用这个视图:
def event_summary(request, event_id):
event = Event.objects.get(id=event_id)
form = EventForm(instance=event)
picture_formset = PictureFormSet(instance=event)
if request.method == 'POST':
form = EventForm(request.POST, instance=event)
if form.is_valid():
event_saved = form.save(commit=False)
picture_formset = PictureFormSet(request.POST, request.FILES, instance=event_saved)
if picture_formset.is_valid():
event_saved.save()
picture_formset.save()
return redirect(active_events)
return render(request, 'event_summary.html', {'form' : form, 'picture_formset' : picture_formset, 'event' : event})
我只想在模板中显示图像 URL。如果我使用:
{% for picture_field in picture_formset %}
{{ picture_field.image }}
{% endfor %}
它显示 url 和 select 输入,但我需要 URL 才能在缩略图和输入中分别使用它。我读到 {{ picture_field.image.url }}
有效,但它无效。
如有任何帮助,我们将不胜感激。谢谢。
您似乎在寻找 instance
属性,该属性附加到表单集中的每个表单:
{% for picture_form in picture_formset %}
{% if picture_form.instance %}
<img src="{{ picture_form.instance.image.url }}" />
{% endif %}
{{ picture_form.image }}
{% endfor %}
使用Alex, and this Whosebug问题提供的代码,我是这样解决的:
{% for picture_field in picture_formset %}
{% if picture_field.instance.image %}
<img width="25%" src="{{ picture_field.instance.image.url }}" />
{% endif %}
{% endfor %}
我有以下型号:
class Event(models.Model):
name = models.CharField(max_length=128, null=True, blank=True)
class Picture(models.Model):
event = models.ForeignKey(Event)
image = models.ImageField(upload_to='media')
Picture
有一个 FK 到 Event
模型,所以当我想在表单中使用它们时(创建一个事件并向其添加图片),我使用内联表单集。
# Event form not important here
PictureFormSet = inlineformset_factory(
Event,
Picture,
min_num=1,
validate_min=True,
extra=1,
fields=(
'image',
),
can_delete=True,
)
当我创建活动和上传文件时,它们工作得很好。问题是当我想编辑事件时。我使用这个视图:
def event_summary(request, event_id):
event = Event.objects.get(id=event_id)
form = EventForm(instance=event)
picture_formset = PictureFormSet(instance=event)
if request.method == 'POST':
form = EventForm(request.POST, instance=event)
if form.is_valid():
event_saved = form.save(commit=False)
picture_formset = PictureFormSet(request.POST, request.FILES, instance=event_saved)
if picture_formset.is_valid():
event_saved.save()
picture_formset.save()
return redirect(active_events)
return render(request, 'event_summary.html', {'form' : form, 'picture_formset' : picture_formset, 'event' : event})
我只想在模板中显示图像 URL。如果我使用:
{% for picture_field in picture_formset %}
{{ picture_field.image }}
{% endfor %}
它显示 url 和 select 输入,但我需要 URL 才能在缩略图和输入中分别使用它。我读到 {{ picture_field.image.url }}
有效,但它无效。
如有任何帮助,我们将不胜感激。谢谢。
您似乎在寻找 instance
属性,该属性附加到表单集中的每个表单:
{% for picture_form in picture_formset %}
{% if picture_form.instance %}
<img src="{{ picture_form.instance.image.url }}" />
{% endif %}
{{ picture_form.image }}
{% endfor %}
使用Alex, and this Whosebug问题提供的代码,我是这样解决的:
{% for picture_field in picture_formset %}
{% if picture_field.instance.image %}
<img width="25%" src="{{ picture_field.instance.image.url }}" />
{% endif %}
{% endfor %}