2010-02-13 41 views
1

所以我想擴展django auth.User模型來添加額外的字段。我讀了幾篇文章,幾乎在那裏。Django無法將UserProfile鏈接到用戶

我只是試圖使註冊表格。所以新用戶可以註冊。我可以得到新的用戶創建的,但是當我來到的UserProfile對象保存到數據庫中失敗理由

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

其中「克萊爾」是用戶名香港專業教育學院投入中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, 
    }) 

並且Ive啓用AUTH覺得像這樣

AUTH_PROFILE_MODULE =「客戶。客戶」

上面的文件都是所謂的「客戶」文件夾中

任何幫助將是巨大的。

乾杯 馬克

回答

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**上方。 :)

+0

感謝工作像一個魅力。只需將上面創建的對象傳遞給另一個對象即可。天才! – 2010-02-15 01:52:49

相關問題