Django ModelForm não salvando dados no banco de dados

Um iniciante do Django aqui tendo muitos problemas para obter formulários trabalhando. Sim, trabalhei com o tutorial e naveguei muito na web - o que tenho é uma mistura do que estou encontrando aqui e em outros sites. Estou usando o Python 2.7 e o Django 1.5. (embora a documentação oficial seja extensa, ela tende a supor que você já sabe a maior parte dela - não é bom como uma referência para iniciantes ou mesmo um tutorial avançado)

Eu estou tentando criar um formulário para detalhes do usuário "estendido" - por exemplo. nome da empresa, endereço, etc, mas os dados do formulário não estão sendo salvos no banco de dados.

Inicialmente tentei criar um modelo estendendo o padrãoUser modelo, mas eu desisti disso - muita modificação necessária e estava entrando em nitty gritty que estava muito além de mim nesta fase. Então, em vez disso, criei um novo modelo chamadoUserProfile:

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)

Eu vi referências diferentes on-line sobre se devo vincular ao modelo do usuário com umForeignKey (como acima) ou com um OneToOne.

Eu estou tentando usar um ModelForm (manter simples para o que deveria ser um formulário simples). Aqui está o meu 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']

Aqui está a minha opinião:

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))     

(sim, há uma inconsistência no UserProfile vs UserDetail - este é um produto de todos os meus hackers e será corrigido assim que eu começar a trabalhar)

Mostra de diagnósticosf.is_valid() retornando True. Da mesma forma, os diagnósticos mostramUserProfile.objects.all() como estando vazio. Eu tentei isso na visão acima após o save (), e também no console do Django.

Aqui está o meu modelo:

 <form method="POST" action="">
 <table>{{ form }}</table>
 <input type="submit" value="Update" />
 {% csrf_token %}
 </form>

No momento, o principal problema é que os dados do formulário não estão sendo salvos no banco de dados. Eu não sei se está sendo lido ainda ou não (uma vez que eu tenho alguns dados no banco de dados ...)

Um pensamento é que oUser relacionamento pode estar causando um problema?

Addendas, seguindo o comentário / ajuda útil de Daniel Roseman:

Agora o formulário está salvando corretamente (confirmado com diagnósticos e verificações de linha de comando. No entanto, quando volto para o formulário, ele não está exibindo os dados existentes. Um formulário com campos de dados vazios é exibido. Até onde eu sei, m passando os dados da instância corretamente.

Existe uma configuração ModelForm que precisa ser alterada?

Aqui está a visão modificada:

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))     

Os diagnósticos mostram querequest.user.profile está definido corretamente (especificamente no campo da empresa). No entanto, o formulário é exibido com campos vazios. A fonte HTML também não mostra valores de dados. Como verificação extra, também tentei alguns diagnósticos de modelo:

<table border='1'>
    {% for field in form%}
        <tr>
            <td>{{field.label}}</td>
            <td>{{field.value}}</td>
        </tr>
    {% endfor%}
</table>

Isso lista os rótulos de campo corretamente, mas os valores são todos relatados comoNone.

Para completar, o campo de usuário do UserProfile agora é definido comouser = models.OneToOneField(settings.AUTH_USER_MODEL) e a expressão lambda User.profile não é alterada.

questionAnswers(2)

yourAnswerToTheQuestion