【问题标题】:How can I get an image URL from an image field in an InlineFormset?如何从 InlineFormset 中的图像字段获取图像 URL?
【发布时间】:2016-02-03 14:48:39
【问题描述】:

我有以下型号:

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')
# 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 和选择输入,但我需要 URL 才能在缩略图和输入中分别使用它。我读过{{ picture_field.image.url }} 有效,但它没有。

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: python django django-models django-templates inline-formset


    【解决方案1】:

    看起来您正在寻找 instance 属性,该属性附加到表单集中的每个表单:

    {% for picture_form in picture_formset %}
        {% if picture_form.instance %}
            <img src="{{ picture_form.instance.image.url }}" />
        {% endif %}
        {{ picture_form.image }}
    {% endfor %}
    

    【讨论】:

    • 现在它向我发送此错误:“图像”属性没有与之关联的文件。
    • 这很奇怪。您的ImageField 被标记为必填项,因此我不处理实例没有图像的情况。也许您提供的模型声明与实际的不同?
    【解决方案2】:

    使用Alexthis StackOverflow问题提供的代码,我这样解决了:

    {% for picture_field in picture_formset %}
        {% if picture_field.instance.image %}
            <img width="25%" src="{{ picture_field.instance.image.url }}" />
        {% endif %}
    {% endfor %}
    

    【讨论】:

      猜你喜欢
      • 2021-10-24
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      相关资源
      最近更新 更多