Django ModelForm не сохраняет данные в базу данных

Новичок в Django, у которого много проблем с работой форм. Да я'мы много работали над учебником и просматривали веб-страницы - у меня есть смесь того, что яНахожу здесь и на других сайтах. Я'используя Python 2.7 и Django 1.5. (хотя официальная документация обширна, предполагается, что вы уже знаете большую ее часть - не очень хорошо для начинающих или даже для продвинутого учебника)

Я пытаюсь создать форму дляпродлен» данные пользователя - например. название компании, почтовый адрес и т. д., но данные формы не сохраняются в базе данных.

Изначально я пытался создать модель, расширяющую стандартUser модель, но я отказался от этого - слишком много нужно было изменить, и это становилось все более и более серьезным, что было далеко от меня на этом этапе. Поэтому вместо этого я создал новую модель под названием:UserProfile

class UserProfile(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, unique=True) 
    company = models.CharField(max_length=50, blank=True)
    address1 = models.CharField(max_length=50, blank=True)
    address2 = models.CharField(max_length=50, blank=True)
    city = models.CharField(max_length=20, blank=True)
    region = models.CharField(max_length=20, blank=True)
    postcode = models.CharField(max_length=10, blank=True)
    country = models.CharField(max_length=20, blank=True)
    phone = models.CharField(max_length=30, blank = True)

Я видел разные ссылки в Интернете о том, должен ли я ссылаться на модель пользователя сForeignKey (как указано выше) или с OneToOne.

Я пытаюсь использовать ModelForm (оставьте его простым для того, что должно быть простой формой). Вот мой forms.py

from django.forms import ModelForm
from .models import UserProfile   

class UserDetailsForm(ModelForm):
    class Meta:
        model = UserProfile
        fields = ['company','address1','address2','city','region', 'postcode','country','phone']

Вот мой взгляд:

def UserDetailsView(request):
    #f = 0
    if request.method == 'POST':
        f = UserDetailsForm(request.POST, instance = request.user)
        if f.is_valid():
            f.save()
    else:
        f = UserDetailsForm(request.POST , instance = request.user)

    print "UserDetails objects: ", (UserProfile.objects.all()) 

    return render_to_response('plagweb/console/profile.html', 
                              { 'form': f}, 
                              context_instance=RequestContext(request))     

(да, есть несоответствие в UserProfile против UserDetail - это продукт всех моих взломов и будет исправлен, как только я его заработаю)

Диагностика шоуf.is_valid() возвращая True. Аналогично, диагностическое шоуUserProfile.objects.all() как пустой Я попробовал это в представлении выше после save (), а также в консоли Django.

Вот мой шаблон:

 
 {{ form }}
 
 {% csrf_token %}
 

На данный момент основная проблема заключается в том, что данные формы не сохраняются в базе данных. Я не знаю, читается ли еще или нет (как только у меня есть некоторые данные в базе данных ...)

Одна мысль состоит в том, чтоUser отношения могут быть причиной проблемы?

Дополнения, следующие из Даниэля Роземанаs полезный комментарий / помощь:

Теперь форма сохраняется правильно (подтверждено диагностикой и проверками командной строки. Однако, когда я возвращаюсь к форме, она не отображает существующие данные. Отображается форма с пустыми полями данных. Насколько я могу судить, я 'м, передавая данные экземпляра правильно.

Есть ли параметр ModelForm, который нужно изменить?

Вот'Видоизмененный вид:

def UserDetailsView(request):
    #print "request co:", request.user.profile.company
    f = UserDetailsForm(request.POST, instance = request.user.profile )

    if request.method == 'POST':
        if f.is_valid():
            profile = f.save(commit=False)
            profile.user = request.user
            profile.save()

    return render_to_response('plagweb/console/profile.html', 
                              { 'form': f}, 
                              context_instance=RequestContext(request))     

Диагностика показывает, чтоrequest.user.profile установлен правильно (в частности, поле компании). Однако форма отображается с пустыми полями. Источник HTML неНе показывать любые значения данных, либо. В качестве дополнительной проверки я также попробовал некоторые шаблоны диагностики:


    {% for field in form%}
        
            {{field.label}}
            {{field.value}}
        
    {% endfor%}

Это правильно перечисляет метки полей, но все значения отображаются как.None

Для полноты, UserProfile 'Пользовательское поле теперь определено какuser = models.OneToOneField(settings.AUTH_USER_MODEL) и лямбда-выражение User.profile не изменяется.

Ответы на вопрос(2)

Ваш ответ на вопрос