2016-01-12 3 views
0

Я видел подобные проблемы здесь, но мне все еще не удалось решить мою проблему. Когда я сохраняю PhotographerProfileForm, на мой взгляд, форма отображается правильно, но после нажатия обновления/отправки ничего на самом деле не сохраняется.Django: Форма не сохраняется в базе данных

Ошибок пока нет.

У меня есть поля, которые предварительно заполнены, и я хотел бы сохранить их в базе данных, но ничего не происходит, и на данный момент вы можете обновлять его только с панели администратора.


models.py

from __future__ import unicode_literals 
from django.contrib.auth.models import User 

from django.db import models 


# Create your models here. 
class PhotographerProfile(models.Model): 
    user = models.OneToOneField(User) 
    location = models.CharField(max_length=200) 
    bio = models.TextField(max_length=500) 

    def __str__(self): 
     return self.user.username 

User.profile = property(lambda u: PhotographerProfile.objects.get_or_create(user=u)[0]) 


from django.db.models.signals import post_save 
from django.dispatch import receiver 

@receiver(post_save, sender=User) 
def create_profile(sender,instance,created,**kwargs): 
    if created: 
     profile, new = PhotographerProfile.objects.get_or_create(user=instance) 

urls.py

urlpatterns = [ 
url(r'^profile/$', 'photoprofile.views.photographer_profile', name = 'photographer_profile'), 
url(r'^profile/portfolio/$', 'photoprofile.views.photographer_portfolio', name='photographer_portfolio'), 

]


views.py

@login_required 


def photographer_profile(request): 
    photographerProfile = PhotographerProfile.objects.get(user=request.user) 
    form = PhotographerProfileForm(initial={'bio':photographerProfile.bio,  'location':photographerProfile.location})#This means you can prepoulate it 
    return render_to_response('photographerprofile.html',{'form':form}, RequestContext(request)) 

    if request.method == 'POST': 
     form = PhotographerProfileForm(request.POST, instance = request.user.profile,) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/accounts/profile') 

    else: 
     user = request.user 
     profile = user.profile 
     form = PhotographerProfileForm() 

    return render(request, 'photographerprofile.html', {'form':form}) 

def photographer_portfolio(request): 
    photographerProfile = PhotographerProfile.objects.get(user=request.user) 
    return render_to_response('photographerportfolio.html', {'photographerProfile':photographerProfile}, RequestContext(request)) 

forms.py

class PhotographerProfileForm(forms.ModelForm): 

class Meta: 
    model = PhotographerProfile 
    exclude = ('user',) 

photographerprofile.html

{% extends 'base.html' %} 
{% load crispy_forms_tags %} 

{% block content %} 

<h2> Profile</h2> 

{% for field in form %} 
{{ field.error}} 

{% endfor %} 

<form action='/accounts/profile/' method='post'> 
{% csrf_token %} 
{{form|crispy}} 

    <input type='submit' value='Update'/> 

    <p>Click <a href='/accounts/profile/portfolio/'>here</a> to view portfolio. </p> 

</form> 

{% endblock %} 

ответ

0

Вы возвращаетесь в третьей строке вашей точки зрения, до того, как форма была обработана. Удалите эту строку.

+0

return render_to_response ('photographerprofile.html', {'form': form}, RequestContext (запрос)). эта линия? Ничего не происходит – rafikee

+0

Да, удалите эту строку полностью. –

+0

Да, я удалил его. Кажется, он ничего не делает, и он также удаляет предварительно заполненные данные. – rafikee

Смежные вопросы