Я использую Django-Profiles с Django 1.4, и мне нужен способ отменить подписку на пользователя, чтобы они могли перестать получать электронные письма.Django form checkbox, чтобы изменить значение в UserProfile
Одним из полей в моей модели 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
Edit: Я добавил дополнительный контекст кода. если self.unsubscribe: находится в save() переопределении. Должно ли это быть где-то еще? Спасибо.
Редактировать 2: Я попытался изменить UnsubscribeForm несколькими способами. Теперь я получаю 404, No User соответствует данному запросу. Но вызываемая функция просмотра работает для других форм, поэтому я не уверен, почему?
urls.py
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'),
)
Эти два адреса называют один и тот же вид, только с использованием другого form_class.
Редактирование3: Так что я не знаю, почему, но когда я удаляю конечную косую черту с URL-адреса отмены подписки, форма, наконец, загружается. Но когда я отправляю форму, я все равно получаю сообщение об ошибке: объект «UnsubscribeForm» не имеет атрибута «unsubscribe». Если кто-нибудь может помочь мне понять, почему конечная косая черта приведет к ошибке 404 (ни один пользователь не отвечает заданному запросу) ум зная. Но как сейчас, форма нагрузки, но не представляет, а след заканчивается на этой линии моей формы:
if self.unsubscribe:
Было бы полезно иметь больше контекста кода. Является ли 'if self.unsubscribe:' функцией в классе? В каком классе это? – computmaxer