Django 1.4에서 Django-Profiles를 사용하고 있으며 이메일 수신을 중단 할 수 있도록 사용자 탈퇴 방법이 필요합니다.UserProfile의 값을 변경하는 Django 양식 체크 박스
내 UserProfile 모델의 필드 중 하나가 user_type이고 USER_TYPES 선택 목록이 있습니다. 그들이 취소하더라도 시스템에서 사용자를 유지하기 위해, 나는 USER_TYPES 중 하나가 InactiveClient 수로 결정, 나는 확인란과 같이 포함 것 :
Models.py :
USER_TYPES = (
('Editor', 'Editor'),
('Reporter', 'Reporter'),
('Client', 'Client'),
('InactiveClient', 'InactiveClient'),
('InactiveReporter', 'InactiveReporter'),
)
class UserProfile(models.Model):
user = models.OneToOneField(User, unique=True)
user_type = models.CharField(max_length=25, choices=USER_TYPES, default='Client')
... etc.
형태. 평
class UnsubscribeForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(UnsubscribeForm, self).__init__(*args, **kwargs)
try:
self.initial['email'] = self.instance.user.email
self.initial['first_name'] = self.instance.user.first_name
self.initial['last_name'] = self.instance.user.last_name
except User.DoesNotExist:
pass
email = forms.EmailField(label='Primary Email')
first_name = forms.CharField(label='Editor first name')
last_name = forms.CharField(label='Editor last name')
unsubscribe = forms.BooleanField(label='Unsubscribe from NNS Emails')
class Meta:
model = UserProfile
fields = ['first_name','last_name','email','unsubscribe']
def save(self, *args, **kwargs):
u = self.instance.user
u.email = self.cleaned_data['email']
u.first_name = self.cleaned_data['first_name']
u.last_name = self.cleaned_data['last_name']
if self.unsubscribe:
u.get_profile().user_type = 'InactiveClient'
u.save()
client = super(UnsubscribeForm, self).save(*args,**kwargs)
return client
편집 : 나는 추가 코드 컨텍스트를 추가했습니다. 만약 self.unsubscribe :가 save() override에있다. 그게 다른 곳에 있어야할까요? 고맙습니다.
편집 2 : 여러 가지 방법으로 UnsubscribeForm을 변경해 보았습니다. 이제 404가 나오는데, 주어진 쿼리와 일치하는 사용자 없음. 하지만 호출되는 뷰 기능은 다른 형식에서도 작동하므로 왜 그런지 모르겠습니다.
이 두 URL을 그냥 다른 form_class를 사용하여, 동일한 뷰를 호출
urlpatterns = patterns('',
url('^client/edit', 'profiles.views.edit_profile',
{
'form_class': ClientForm,
'success_url': '/profiles/client/edit/',
},
name='edit_client_profile'),
url('^unsubscribe', 'profiles.views.edit_profile',
{
'form_class': UnsubscribeForm,
'success_url': '/profiles/client/edit/',
},
name='unsubscribe'),
)
urls.py.
편집 3 : 그래서 이유는 모르지만 탈퇴 URL에서 후행 슬래시를 제거하면 양식이로드됩니다. 하지만 양식을 제출할 때 여전히 오류가 발생합니다. 'UnsubscribeForm'객체에 'unsubscribe'속성이 없습니다. 후미 슬래시가 404 오류 (사용자가 지정된 검색어와 일치하지 않음)를 발생시키는 이유를 이해할 수있는 사람이 있다면 마음 알고. 그러나 지금과 같은 형태의로드하지만, 제출하지 않으며, 추적은 내 양식의이 라인에 끝 :
if self.unsubscribe:
더 코드 컨텍스트가 도움이 될 것이다 :
이 방법을 저장할의 나 무엇처럼 보인다. 클래스의 함수에서'if self.unsubscribe :'입니까? 어떤 계급입니까? – computmaxer