2010-02-13 4 views
1

Je souhaite donc étendre le modèle django auth.User pour ajouter des champs supplémentaires. J'ai lu quelques articles ici et là, et je suis presque là. J'essaye juste de faire la forme d'inscription pour le moment. Ainsi, un nouvel utilisateur peut s'inscrire. Je peux obtenir le nouvel utilisateur créé, mais quand je viens pour sauver l'objet UserProfile à la base de données, il ne réussit pas citantDjango ayant des problèmes pour lier un UserProfile à l'utilisateur

Cannot assign "u'clare'": "Customer.user" must be a "User" instance. 

où « clare » est le ive nom d'utilisateur mis en. Cet utilisateur est créé dans Auth.User, mais le UserProfile, dans ce cas appelé Customer n'est pas créé. Donc, je pense im faire quelque chose de mal lors de la création de l'objet et en utilisant la clé étrangère pour le faire. Quoi qu'il en soit, voici les fichiers pertinents.

models.py

from django.db import models 
from RadioBusiSite.music.models import PlayList 
from django.contrib.auth import authenticate 
from django.contrib.auth.models import User 
from django import forms 

class Location(models.Model): 
    Address = models.CharField(max_length=300) 
    PhoneNumber = models.CharField(max_length=15) 
    Size = models.IntegerField('Size of Premises') 

    def __unicode__(self): 
     return self.Address 

class Customer(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    Company = models.CharField(max_length=200) 
    ContactPerson = models.CharField('Contact Person', max_length=200) 
    email = models.CharField(max_length=200) 
    ABN = models.CharField(max_length=50) 
    Location = models.ForeignKey(Location) 
    Playlist = models.ManyToManyField(PlayList) 

    def __unicode__(self): 
     return self.Company 

forms.py

from django.contrib.auth import authenticate 
from django.contrib.auth.models import User 
from django import forms 
from RadioBusiSite.customer.models import Customer 
from django.forms.models import modelformset_factory 

class CustomerForm(forms.Form): 
    user = forms.CharField(max_length=30, label='User Name') 
    password1 = forms.CharField(max_length=30, label='Password', widget=forms.PasswordInput(render_value=False)) 
    password2 = forms.CharField(max_length=30, label=' Check Password', widget=forms.PasswordInput(render_value=False)) 
    Company = forms.CharField(max_length=200) 
    ContactPerson = forms.CharField(max_length=200) 
    email = forms.EmailField() 
    ABN = forms.CharField(max_length=50) 
    #Location = forms.ForeignKey(Location) 
    #Playlist = forms.ManyToManyField(PlayList) 

    def clean(self): 
     if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data: 
      if self.cleaned_data['password1'] != self.cleaned_data['password2']: 
       raise forms.ValidationError("You must type the same password each time") 
     return self.cleaned_data 

    def clean_user(self): 
     try: 
      User.objects.get(username=self.cleaned_data['user']) 
     except User.DoesNotExist: 
      return self.cleaned_data['user'] 
     raise forms.ValidationError("This user is already in use. Please Choose another one.") 

    def save(self): 
     new_user = User.objects.create_user(username = self.cleaned_data['user'], 
              email = self.cleaned_data['email'], 
              password = self.cleaned_data['password1']) 
     new_customer = Customer.objects.create(user=self.cleaned_data['user'], 
               company = self.cleaned_data['Company'], 
               ContactPerson = self.cleaned_data['ContactPerson'], 
               email = self.cleaned_data['email'], 
               ABN = self.cleaned_data['ABN']) 

views.py

from django.shortcuts import render_to_response 
from django.http import HttpResponse, HttpResponseRedirect 
from RadioBusiSite.customer.models import Customer,Location 
from RadioBusiSite.customer.forms import CustomerForm 
from django.contrib.auth import authenticate 
from django.contrib.auth.models import User 

def addCustomer(request): 
    if request.method == 'POST': 
     #user = UserForm(request.POST, instance=request.user) 
     form = CustomerForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/home/') 
    else: 
     form = CustomerForm() 

    return render_to_response('addCustomer.html', { 
     'form': form, 
    }) 

et Ive a permis à la AUTH penser comme si

AUTH_PROFILE_MODULE = « client .Client'

le fichier ci-dessus sont tous dans un dossier appelé « client »

Toute aide serait grande.

Vive Mark

Répondre

2
def save(self): 
    new_user = User.objects.create_user(username = self.cleaned_data['user'], 
         email = self.cleaned_data['email'], 
         password = self.cleaned_data['password1']) 
    new_customer = Customer.objects.create(user=**new_user**, 
          company = self.cleaned_data['Company'], 
          ContactPerson = self.cleaned_data['ContactPerson'], 
          email = self.cleaned_data['email'], 
          ABN = self.cleaned_data['ABN']) 

Notez que le changement **within stars** ci-dessus. :)

+0

Merci a travaillé comme un charme. Il suffit de passer l'objet créé ci-dessus dans l'autre objet. Génie! –

Questions connexes