以ModelForm显示图像

时间:2019-01-14 13:08:17

标签: django modelform

我有以下模型:

class Portfolio(models.Model):
    id = models.AutoField(primary_key=True)
    member = models.ForeignKey(Member, on_delete=models.CASCADE)
    image = models.ImageField(upload_to='portraits/', default='/images/some_image.png')

为此,我制作了ModelForm:

 class PortfolioForm(forms.ModelForm):

    class Meta:
        model = Portfolio
        exclude = ['id']

我需要一个模板中的许多模板,因此我认为按照以下方式创建它们

  def portfolio_form(request, pk):
       ...
       formset =  PortfolioFormSet(queryset=Portfolio.objects.filter(pk__in=list_of_ids))

对于x in p]

最终在html中,我有这个:

<form enctype="multipart/form-data" action="{% url 'elec:portfolio_form' pk=id %}" method="POST">{% csrf_token %}
  ...
  {{ formset.management_form }}
  {% for form in formset.forms %}
       <tr>{% for field in form %}
            {% if field.name == 'image' %}
                 <td><img src="{{field.image.url}}"></td>
            {% else %}
                 <td align="center" valign="middle">{{field}}</td>
            {% endif %}
      {% endfor %}</tr>
  {% endfor %}
  <input type="submit" class="btn btn-default" value="Save and Refresh" />
</form>

现在,我希望看到的是我保存到该模型中的图像。 if语句返回为false,但是为什么呢?我究竟做错了什么?我看过的所有地方都应该像这样工作。

我还添加了request.FILES在PortfolioForm中,该实例没有被调用,我该如何解决?

1 个答案:

答案 0 :(得分:0)

好吧,因为我用其他字眼来找到解决方案,所以我在Stackoverflow中找到了解决方案。

您需要在模板中执行的操作,而不是:

{<td><img src="{{field.image.url}}"></td>}

是这个:

{<td><img src="{{form.instance.image.url}}"></td>}