Отображение изображения в ModelForm

Вопрос задан: 8 месяцев назад Последняя активность: 8 месяцев назад
up 0 down

У меня есть следующая модель:

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))

для х в р]

наконец в 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 возвращается как ложное, но почему? Что я делаю неправильно? Куда бы я ни посмотрел, все должно работать так.

Также я добавил request.FILES в PortfolioForm с тем, что экземпляр не вызывается, как я могу это исправить?

1 ответ

up 0 down accepted

Хорошо, я нашел решение в Stackoverflow, так как использовал другие слова, чтобы найти решение.

что нужно сделать в шаблоне вместо:

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

это :

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