2017-11-08 1 views
1

사용자가 등록하는 즉시 프로젝트가 정보를 입력해야하는 곳으로 업데이트보기로 리디렉션됩니다. 사용자가 가입 한 후 자동으로 로그인 했으므로 해당 사용자 필드가 자동으로 채워지 길 원합니다. 편집 할 수 없습니다.Django 양식의 자동 채우기 사용자

class UserProForm(forms.ModelForm): 
    class Meta: 
     model = Userpro 
     fields = '__all__' 

views.py

모든 필요한 라이브러리를 가져
def update(request): 
    if request.method == 'POST': 
     form = UserProForm(request.POST or None) 
     if form.is_valid(): 
      form.save() 
      return redirect('/') 
     else: 
      redirect('/') 
    else: 
     form = UserProForm() 
     return render(request, 'app/update.html', {'form': form}) 

forms.py models.py

class Userpro(models.Model): 
    user = models.OneToOneField(User) 
    dob = models.DateField(default=datetime.date.today) 
    country = models.CharField(max_length=50, default='') 
    qualification = models.CharField(max_length=10, choices=CHO, 
default='No') 
    university = models.CharField(max_length=100, default='') 
    location = models.CharField(max_length=100, default='') 

    def __str__(self): 
     return str(self.user) 

.

+1

편집 할 수 없도록하려면 양식 (필드)을 표시하지 마십시오. – hansTheFranz

+0

@hansTheFranz 예, 맞습니다. 그러나 현재 사용자를 보는 것이 자동 채워지 길 원합니다. –

답변

1

양식에 widgets을 사용할 수 있습니다. 이 같은 (아래 코드는 테스트되지 않았습니다).

from django.forms import TextInput 


class UserProForm(forms.ModelForm): 
    class Meta: 
     model = Userpro 
     fields = '__all__' 
     widgets = { 
      'user': TextInput(attrs={'readonly': 'readonly'}) 
     } 

def update(request): 
    instance = Userpro.objects.filter(user=request.user).first() 
    if request.method == 'POST': 
     form = UserProForm(request.POST, instance=instance) 
     if form.is_valid(): 
      form.save() 
      return redirect('/') 
     else: 
      return redirect('/') 
    else: 
     form = UserProForm(instance=instance) 
     return render(request, 'app/update.html', {'form': form}) 

편집 : 우리는 다음과 같이 딕셔너리 내부 사용자를 통과해야합니다 form = UserProForm({'user': request.user})

편집 2 : 먼저 프로필 개체를 찾을 다음 폼

instance = Userpro.objects.filter(user=request.user).first() 
form = UserProForm(request.POST, instance=instance) 
+0

오류가 발생했습니다. app.views.update 뷰가 HttpResponse 객체를 반환하지 않았습니다. 대신 None을 반환했습니다. –

+1

user = request.user는 인수가 아닙니다. 도움을 청하십시오. –

+0

동일한 사용자에 대해이 양식을 다시 채우면 해당 정보가 update.But을 가져와야합니다. 도움이 필요하지 않습니다. 도움이 필요합니다! 미리 감사드립니다. –

1

내가 생각에 전달한다 수정하고자하는 필드가있는 ModelForm을 사용하고 템플릿 인스턴스 인스턴스 값을 표시하는 경우 더 좋습니다.

from django.forms import TextInput 


class UserProfileForm(forms.ModelForm): 
    class Meta: 
     model = Userprofile 
     fields = ('field1', 'field2') 

def update(request): 
    if request.method == 'POST': 
     form = UserProfileForm(request.POST or None) 
     if form.is_valid(): 
      form.save() 
      return redirect('/') 
     else: 
      redirect('/') 
    else: 
     form = UserProfileForm(user=request.user) 
     return render(request, 'app/update.html', {'form': form}) 


# template 
    <form method="post"> 
     {% csrf_token %} 

     <div class="form-row"> 
      {{ form.field1.errors }} 
      {{ form.field1.label_tag }} {{ form.field1 }} 
     </div> 
     <div class="form-row"> 
      {{ form.field2.errors }} 
      {{ form.field2.label_tag }} {{ form.field2 }} 
     </div> 
     <div class="form-row"> 
      {{ form.instance.field3.errors }} 
      {{ form.instance.field3.label_tag }} {{ form.instance.field3 }} 
     </div> 
    </form> 
관련 문제