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
Merci a travaillé comme un charme. Il suffit de passer l'objet créé ci-dessus dans l'autre objet. Génie! –