2012-12-20 5 views
0

다음과 같은 모델이 있다고 가정 해 봅시다.ModelForm의 사용자 정의 양식 필드에 값을 미리 채우는 방법

models.py

class Profile(models.Model): 
    user = models.OneToOneField(User) 
    middle_name = models.CharField(max_length=30, blank=True, null=True) 

그리고 위에서 언급 한의 인스턴스를 설정시에서는 ModelForm

forms.py

class ProfileForm(ModelForm): 
    email = forms.CharField() 
    class Meta: 
     model = models.Profile 

    fields = ('email', 'middle_name') 

에서 다음과 같이 나는 사용자 정의 필드 email이 modelform이므로 데이터는 다음과 같이 편집 템플리트의 양식으로 미리 채워집니다.

def edit_profile(request): 
    profile = models.Profile.objects.get(user=request.user) 
    profileform = forms.ProfileForm(instance=profile) 
    return render_to_response('edit.html', { 'form' : 'profileform' }, context_instance=RequestContext(request)) 

views.py

지금 내가 얻을 형태로 모든 프로필 모델에서 필드하지만 사용자 정의 필드에 채워져 모든 값은 비어 있고 그것은 의미가 있습니다.

하지만 맞춤 입력란의 값을 미리 채울 수있는 방법이 있습니까? 아마도

email = forms.CharField(value = models.Profile.user.email) 

답변

4

다른 제안이 있습니까? 그 모델과 아무 관련이 없다면, Profile의 ModelForm 내에 그 email 필드를 가지고있는 것은 대단한 팬이 아닙니다.

대신 두 가지 양식을 사용하고 초기 데이터를 email이 포함 된 맞춤형 데이터로 전달하는 방법은 무엇입니까? , 프로파일 및 사용자의 이메일 양식을 모두 검증하고

다음
# this name may not fit your needs if you have more fields, but you get the idea 
class UserEmailForm(forms.Form): 
    email = forms.CharField() 

views.py

profile = models.Profile.objects.get(user=request.user) 
profileform = forms.ProfileForm(instance=profile) 
user_emailform = forms.UserEmailForm(initial={'email': profile.user.email}) 

forms.py하지만, 그 일이 대부분이다 : 그래서 상황이 같을 것이다 똑같다.

프로필 ModelForm과이 UserEmailForm간에 로직을 공유하지 않는다고 가정합니다. 프로필 인스턴스 데이터가 필요하다면 언제든지 거기에 전달할 수 있습니다.

저는 마법이 덜하고 1 년 만에 코드를 돌아 보면 간단한 스캔에서 왜 emailModelForm의 일부인지 왜 궁금해 할 것입니까? 필드에 입력하십시오.

+0

나는 당신과 동의한다, 그것은 진짜로 modelform 내의 전자 우편 분야가있는 이해되지 않는다. 비록 제 경우에는 시나리오가 조금 다릅니다. 또한, 나는 단지'inital'의 문서를 읽고 있었고 제 경우에는 도움이 될 것 같습니다. 답변 주셔서 감사합니다 :) – Amyth

+0

쿨, 전 그냥 가정을하고 있었지만, 도움이된다면 정말 멋지 네요! 행복한 코딩. – Bartek

관련 문제