Я в тупике!django-profiles и nonetype user
Я создаю форму, которая позволяет пользователю одновременно заполнять поля профиля и поля пользователя. Есть примеры по всей сети для этого и номера на этом сайте (например How to create a UserProfile form in Django with first_name, last_name modifications?)
однако, попробовать, как я мог бы, я продолжаю получать пользователь ни один типа в моем form.py
некоторый код: forms.py
class ProfileForm(ModelForm):
first_name = forms.CharField(label="First name")
last_name = forms.CharField(label="Last name")
def __init__(self, *args, **kwargs):
super(ProfileForm, self).__init__(*args, **kwargs)
print self.instance #profile does not exist here
self.fields['first_name'].initial = self.instance.user.first_name
self.fields['last_name'].initial = self.instance.last_name
def save(self, *args, **kwargs):
super(ProfileForm, self).save(*args, **kwargs)
self.instance.user.first_name = self.cleaned_data.get('first_name')
self.instance.user.last_name = self.cleaned_data.get('last_name')
self.instance.user.save()
class Meta:
model = UserProfile
exclude = ('user')
urls.py
url(r'^profiles/edit/', 'profiles.views.edit_profile', {'form_class': ProfileForm}, name='edit_profile'),
template.html
<div class="clearfix">
<legend>Edit your profile details</legend>
</div>
{% include 'profiles/profile_form.html' with user=user %}
вид происходит из django-профилей, но я даже попытался потянуть в приложение и увидел, что мой пользователь существует и втягивается в экземпляр в представлении, экземпляр лишен пользователя в форме!
Другие примечания: я использую электронную почту в качестве своего метода аутентификации, отличного от имени пользователя, но все равно имею случайное имя пользователя на основе текста (потому что я понимаю, что есть проблемы с сообщениями как имена пользователей в django-профилях). Может ли это быть моей проблемой?
, если его полезным, вот моя Аутентифицировать Защита:
def authenticate(self, username=None, password=None):
""" Authenticate a user based on email address as the user name. """
try:
user = User.objects.get(email=username)
if user.check_password(password):
return user
except User.DoesNotExist:
return None
def get_user(self, user_id):
""" Get a User object from the user_id. """
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
это ссылки в качестве пользовательского бэкэнда, и я подтвердил, что он работает.
Надеюсь, у кого-то есть понимание!
редактирует:
мое полное исключение:
Exception Type: TemplateSyntaxError
Exception Value: Caught AttributeError while rendering: 'NoneType' object has no attribute 'first_name'
Exception Location:/Users/willcadell/placespeak/webapps/place/../place/accounts/forms.py in __init__, line 13
вид (из Джанго профилей):
def edit_profile(request, form_class=None, success_url=None,
template_name='profiles/edit_profile.html',
extra_context=None):
try:
profile_obj = request.user.get_profile()
print profile_obj #profile is good here
except ObjectDoesNotExist:
return HttpResponseRedirect(reverse('profiles_create_profile'))
if success_url is None:
success_url = reverse('profiles_profile_detail', kwargs={ 'username': request.user.username })
if form_class is None:
form_class = utils.get_profile_form()
if request.method == 'POST':
form = form_class(data=request.POST, files=request.FILES, instance=profile_obj)
if form.is_valid():
form.save()
return HttpResponseRedirect(success_url)
else:
form = form_class(instance=profile_obj)
if extra_context is None:
extra_context = {}
context = RequestContext(request)
for key, value in extra_context.items():
context[key] = callable(value) and value() or value
return render_to_response(template_name,
{ 'form': form,
'profile': profile_obj,},
context_instance=context)
Я также добавил два замечания с указанием, где профиль существует и где его не является, т. е. находится в представлении как profile_obj, но не появляется в форме как self.instance.
Другим (возможно, не связанным) симптомом является то, что для этой страницы исключения панель инструментов django не отображается ... странно!
Можете ли вы опубликовать свое мнение и полную информацию об исключении. – Meitham
сделали так, спасибо за помощь! –
У вас есть объект профиля для этого пользователя? –