У Django проблемы с привязкой UserProfile к пользователю - PullRequest
1 голос
/ 13 февраля 2010

Так что я хочу расширить 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

1 Ответ

2 голосов
/ 13 февраля 2010
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** выше. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...