그래서 등록 프로세스에 보안 질문을 구현 한 웹 응용 프로그램에서 작업하고 있습니다. 내 모델이 설정되는 방식과 Django의 클래스 기반 뷰 (CBV)를 사용하려고한다는 사실 때문에이 모든 것을 완벽하게 통합하는 데 문제가있었습니다.Django 클래스 기반보기 (CBV)에서 인라인 서식 저장
View.py
class AcctRegistration(CreateView):
template_name = 'registration/registration_form.html'
disallowed_url_name = 'registration_disallowed'
model = AcctUser
backend_path = 'registration.backends.default.DefaultBackend'
form_class = AcctRegistrationForm
success_url = 'registration_complete'
def form_valid(self, form):
context = self.get_context_data()
securityquestion_form = context['formset']
if securityquestion_form.is_valid():
self.object = form.save()
securityquestion_form.instance = self.object
securityquestion_form.save()
return HttpResponseRedirect(self.get_success_url())
else:
return self.render_to_response(self.get_context_data(form=form))
def get_context_data(self, **kwargs):
ctx = super(AcctRegistration, self).get_context_data(**kwargs)
if self.request.POST:
ctx['formset'] = SecurityQuestionsInLineFormSet(self.request.POST, instance=self.object)
ctx['formset'].full_clean()
else:
ctx['formset'] = SecurityQuestionsInLineFormSet(instance=self.object)
return ctx
그리고 : 여기
class AcctSecurityQuestions(models.Model):
class Meta:
db_table = 'security_questions'
id = models.AutoField(primary_key=True)
question = models.CharField(max_length = 250, null=False)
def __unicode__(self):
return u'%s' % self.question
class AcctUser(AbstractBaseUser, PermissionsMixin):
...
user_questions = models.ManyToManyField(AcctSecurityQuestions, through='SecurityQuestionsInter')
...
class SecurityQuestionsInter(models.Model):
class Meta:
db_table = 'security_questions_inter'
acct_user = models.ForeignKey(AcctUser)
security_questions = models.ForeignKey(AcctSecurityQuestions, verbose_name="Security Question")
answer = models.CharField(max_length=128, null=False)
내 현재보기처럼 보이는 것입니다
Model.py : 여기 내 모델처럼 무엇인가 울부 짖음과 완전을 위해 나의 모양이 보이는 것 여기에서있다 :
Forms.py
class AcctRegistrationForm(ModelForm):
password1 = CharField(widget=PasswordInput(attrs=attrs_dict, render_value=False),
label="Password")
password2 = CharField(widget=PasswordInput(attrs=attrs_dict, render_value=False),
label="Password (again)")
class Meta:
model = AcctUser
...
def clean(self):
if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
if self.cleaned_data['password1'] != self.cleaned_data['password2']:
raise ValidationError(_("The two password fields didn't match."))
return self.cleaned_data
SecurityQuestionsInLineFormSet = inlineformset_factory(AcctUser,
SecurityQuestionsInter,
extra=2,
max_num=2,
can_delete=False
)
이 게시물 그러나 선택한 대답의 가장 최근의 코멘트 나에게 많은 도움이 자사의 해당 formset 데이터를 얻을 오버라이드 (override)의 형태와 포스트에 통합해야한다고 언급 방법 :
django class-based views with inline model-form or formset
내 해당 formset에서 내 데이터에 추가 할 어떻게이 get
및 post
을 overiding하고 있다면? 그리고 formset 데이터를 통해 루프를 호출하려면 어떻게해야합니까?
그래서 저는 장고를 처음 사용하기 때문에 인라인 formset이 필요한지 확신 할 수 없습니다. 할 일이 옳은 것 같았지만 둘 사이의 차이를 완전히 이해하지 못할 수도 있습니다. 나는 이것을 시험해보고 알려줄 것이다.''Base'와''get'' 함수의 시작 부분에''self.object = None'' 행을''BaseCreateView 이 함수가 상속받은''post''와'get' 함수는 무엇입니까? – BoogeyMarquez
코드를 조금만 확인하면 데이터베이스에 이미 사용자 개체가있을 때 인라인 서식 세트를 사용하는 것이 편리하다고 생각합니다. 그런 다음 초기화 할 때 적절한 보안 질문 등을 자동으로 미리로드합니다. 생성시 일반 모델 집합이 가장 좋을 수 있으며 사용자에게 연결되는 필드를 통과 테이블에 포함하지 않는 것이 가장 좋습니다. 그런 다음 사용자를 만들고 생성 된 테이블에 사용자 필드를 수동으로 설정할 수 있습니다. 그리고, 예,'self.object'가 아마 초기화 될 것입니다. –
피터, 대답은 거의 다 왔어. 최근 답변을 사용하고 있지만 중간 모델이 증가하지 않습니다. 내 모델이 어떻게 설정되었는지 알 수 있습니다. – BoogeyMarquez