Так что я хочу расширить django auth.User модель, чтобы добавить дополнительные поля. Я прочитал несколько статей здесь и там, и почти там.
Я сейчас пытаюсь сделать регистрационную форму. Таким образом, новый пользователь может зарегистрироваться. Я могу создать нового пользователя, но когда я сохраняю объект UserProfile в базе данных, он перестает работать, ссылаясь на
Cannot assign "u'clare'": "Customer.user" must be a "User" instance.
где "clare" - это введенное мной имя пользователя. Этот пользователь создается в Auth.User, но UserProfile, в данном случае с именем Customer, не создается. Поэтому я думаю, что я делаю что-то не так при создании объекта и использовании внешнего ключа для этого. В любом случае ниже приведены соответствующие файлы.
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,
})
И я включил AUTH, думаю, что так
AUTH_PROFILE_MODULE = 'customer.Customer'
Файл выше находится в папке с именем "customer"
Любая помощь будет отличной.
Приветствие
Mark