所以我想扩展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”的文件夹中
任何帮助都会很棒。
干杯 标记
答案 0 :(得分: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'])
请注意上面的更改**within stars**
。 :)