2014-04-01 4 views
1

Django Model Form을 사용하여 간단한보기를 작성했지만 이미지 필드가 '이 필드가 필요합니다'라는 오류 메시지의 유효성을 검사하지 못합니다. 내가 어디에 문제가 궁금Django Model Form 이미지 필드가 유효하지 않음

...

모델 :

class Deal(AbstractModel): 
    IMAGE_MAX_LENGTH = 200 

    place = models.ForeignKey(Place, related_name='deals', related_query_name='deal', verbose_name=_("Place")) 
    image = models.ImageField(default='deals/default.png', max_length=IMAGE_MAX_LENGTH, upload_to='deals', verbose_name=_("Image")) 
    ... 

보기 :

@login_required 
def deals_create(request): 
    # Get place id 
    place_id = request.GET.get('place') 
    # Get place 
    place = Place.objects.get(id=place_id) 
    # Process form data 
    if request.method == 'POST': 
     form = DealsCreateForm(request.POST, request.FILES) 
     # Validate post data 
     if form.is_valid(): 
      # Save deal data 
      deal = form.save(commit=False) 
      deal.place = place 
      deal.save() 
      # Redirect to reload page and clear post data 
      return HttpResponseRedirect(reverse('deal_manager:deals_pending')) 
    else: 
     form = DealsCreateForm() 
    return render(request, 'deal_manager/deals_create.html', { 
     'form': form, 
     'place': place, 
    }) 

형태 :

class DealsCreateForm(ModelForm): 

    class Meta: 
     model = Deal 
     fields = [ 
      'image', 'product_name', 'product_description', 
      'regular_price', 'sale_price', 'limit', 'terms', 
     ] 

틀 :

{% extends "deal_manager/deal_manager.html" %} 

{% load i18n %} 
{% load staticfiles %} 

{% block page_content_body %} 
     <div class="row"> 
      <div class="span12"> 
       <form action="{% url 'deal_manager:deals_create' %}?place={{ place.id }}" method="post"> 
        {% csrf_token %} 
        {{ form.as_p }} 
        <input type="submit" value="{% trans 'Create' %}" /> 
       </form> 
      </div> 
     </div> 
     <div class="gap gap-small"></div> 
{% endblock page_content_body %} 

참고 : 양식은 양식 메타 필드에서 이미지 필드를 제거 할 때 유효성이 검사됩니다.

참고 : 파일 업로드는이 ​​모델에 대해 장고 관리자와 잘 작동합니다.

+0

당신은 템플릿 코드를 포함 할 수 있습니다? – patsweet

+0

질문을 편집하여 템플릿 코드를 포함 시켰습니다. –

답변

3

이미지 필드 및 파일 필드 데이터를 양식에 바인딩하려면 enctype="multipart/form-data"을 포함해야합니다. 이 필드가 없으면 해당 필드는 유효하지 않습니다.

{% block page_content_body %} 
     <div class="row"> 
      <div class="span12"> 
       <form enctype="multipart/form-data" action="{% url 'deal_manager:deals_create' %}?place={{ place.id }}" method="post"> 
        ... 

여기에 관련 문서는 다음과 같습니다 https://docs.djangoproject.com/en/stable/ref/forms/api/#binding-uploaded-files-to-a-form

+0

나는 그것이 단순한 것임을 알았지 만, 일이 더러워지면 우리는 여분의 시선이 필요하다. 고맙습니다! –