2017-05-17 3 views
0

나는 거의 완전히 장고와 웹 개발에 익숙하다. 그래서 나를 도와주세요. Django에서 두 개의 날짜 (시작 날짜와 종료 날짜)와 텍스트 입력을받는 양식을 만들고 싶습니다. 내 프로그램에 daterangepicker를 얻으려고 모든 것을 시도했지만 daterangepicker를 표시하지만 양식에 html 입력을 다시 전달할 수 없거나 표시 할 daterangepicker를 가져올 수 없습니다. 기본적으로, 나는 단지 사용자가 캘린더를 사용하여 두 개의 날짜를 선택할 수 있도록하고 싶다. 그래서 나는 필요하지 않다면 daterangepicker를 구현할 필요가 없다고 생각한다. 여기에 지금까지 무엇을 가지고 :datanangepicker 입력을 django 폼에 전달하는 방법은 무엇입니까?

views.py

from .forms import HyugaRequestForm 

def create_req(request): 
    name = request.user.username 
    form = HyugaRequestForm(request.POST or None) 
    if form.is_valid(): 
     instance = form.save(commit = False) 
     instance.name = name 
     instance.s_date = form.cleaned_data.get('Start_Date') 
     instance.e_date = form.cleaned_data.get('End_Date') 
     instance.save() 
    context = {'form':form,} 
    return render(request,'timeline/hyuga_requests_form.html', context) 

forms.py

from django import forms 
from .models import Hyuga_Requests 
from django.forms import ModelForm 
from django.forms.extras import SelectDateWidget 

class HyugaRequestForm(forms.ModelForm): 
    Start_Date = forms.DateField(widget=SelectDateWidget) 
    End_Date = forms.DateField(widget=SelectDateWidget) 

    class Meta: 
     model = Hyuga_Requests 
     fields = ['reason'] 

models.py

from __future__ import unicode_literals 
from django.db import models 

class Hyuga_Requests(models.Model): 
    name = models.CharField(max_length=50) 
    s_date = models.DateField(auto_now=False, auto_now_add = False) 
    e_date = models.DateField(auto_now=False, auto_now_add = False) 
    reason = models.TextField(max_length=500) 

    def __unicode__(self): 
     return self.name 

템플릿

<div class='container'> 
    <h1> Request Form </h1> 
    <form method="post"> 
     {% csrf_token %} 
     {{ form.as_p }} 
     <button type='submit'>Submit Request Form</button> 
    </form> 
</div> 

도움이 noobie 알아주세요 ...

답변

1

당신은 모델 형태로 모델에서 속성을 s_datee_date를 전달하지 않습니다. 양식에서 Start_DateEnd_Date에 대한 새 필드를 정의하지만 실제 모델과 연관되지는 않습니다.

from django import forms 
from django.forms import ModelForm # EDIT: this import is needless 
from django.forms.extras import SelectDateWidget 

from .models import Hyuga_Requests 


class HyugaRequestForm(forms.ModelForm): 
    class Meta: 
     model = Hyuga_Requests 
     fields = ('reason', 's_date', 'e_date') 
     widgets = { 
      's_date': SelectDateWidget(), 
      'e_date': SelectDateWidget(), 
     } 

는 이제 모델 폼에 필드를 s_datee_date을 통과하고 그들을 위해 위젯을 설정

이처럼 forms.py을 변경

.

답변 외에도 코드에서 소개 한 몇 가지 나쁜 습관을 지적하고자합니다. 그것은 명명 규칙에 관한 것이며 매우 중요합니다.

클래스 이름의 경우 PascalCase : Hyuga_RequestsHyugaRequests이어야합니다.

클래스의 속성 이름이 snake_case에 작성되었습니다. Start_Date이 좋지 않으면 start_date으로 지정하십시오. 또한 s_date은 모호 할 수 있으므로 전체 이름을 쓰십시오 : start_date.

가져 오기를 구조화하고 결국 빈 줄로 구분합니다. 모델 클래스의 가져 오기를 어떻게 가져 왔는지 확인하십시오.

행운을 빈다.

관련 문제