2012-04-10 9 views
0

Meine Models.py, Hier verwende ich OneToOneField hier, um StudentProfile zu erweitern.FieldError mit Keyword 'Benutzername' beim Versuch, einen Benutzer mit Django zu erstellen

from django.db import models 
from django.contrib.auth.models import User, UserManager 


class SecretQuestion(models.Model): 
    question = models.CharField(max_length=200) 
    def __unicode__(self): 
     return self.question 


class StudentProfile(models.Model): 
    user = models.OneToOneField(User) 
    batch = models.CharField(max_length=10) 
    course = models.CharField(max_length=20) 
    date_of_birth = models.DateField() 
    secret_question = models.ForeignKey(SecretQuestion) 
    answer = models.CharField(max_length=20) 
    contact = models.CharField(max_length=20) 

Und meine Registrierung Ansicht, ich bin neue Benutzer main_user Erstellen und ich verwende es Student Profil zu erstellen: -

def register_page(request): 
    if request.method == 'POST': 
     form = RegistrationForm(request.POST) 
     if form.is_valid(): 
      main_user = User.objects.create_user(
       username= form.cleaned_data['username'], 
       password = form.cleaned_data['password1'], 
      ) 
      user = StudentProfile.objects.create(    
       user_id = main_user.id,http://stackoverflow.com/questions/ask 
       batch=form.cleaned_data['batch'], 
       course=form.cleaned_data['course'], 
       date_of_birth=form.cleaned_data['date_of_birth'], 
       secret_question=form.cleaned_data['secret_question'], 
       answer=form.cleaned_data['answer'], 
       contact=form.cleaned_data['contact'] 
      ) 
     return HttpResponseRedirect('/register/success/') 
    else: 
     form = RegistrationForm() 

    variables = RequestContext(request, {'form': form}) 
    return render_to_response('registration/register.html',variables) 

Nach der Registrierung in Django, erhalte ich,

FieldError at /register/ 

Cannot resolve keyword 'username' into field. Choices are: answer, batch, contact, course, date_of_birth, id, secret_question, user 

Dies geschieht nach dem Ausfüllen der Registrierungsfelder und Drücken der Registertaste. Ich kann diesen Fehler nicht interpretieren. Was bedeutet das?

Antwort

1

Sie müssen RegistrationForm Unterklasse wie in Adding extra fields to django-registration form


User.objects.create_user hat kein Schlüsselwort-Argument namens username beschrieben. Der Benutzername muss das erste Positionsargument sein:

Bitte geben Sie in Zukunft mindestens die Zeilennummer an, an der der Fehler aufgetreten ist.

+0

Ich habe das getan, aber immer noch denselben Fehler Ich erhalte. Auch ich weiß nicht, was passiert, denn wenn ich den ganzen Usercode lösche (dieser Teil form.cleaned_data ['username']) bekomme ich immer noch denselben Fehler, irgendeinen Hinweis? – JohnRK

+0

@Jainit Hmm sehe meine Bearbeitung, genauer gesagt die [zweite Antwort] (http://stackoverflow.com/a/7580903/500584) auf die verlinkte Frage - hilft das? – agf

+0

Es scheint, dass es funktioniert, habe ich zwei Fragen, Gibt es eine Möglichkeit, E-Mail von RegistrationForm und bei Verwendung der Klasse Meta und Generieren eines Formulars aus einem Modell auszuschließen, gibt es eine Möglichkeit, quesryset in einem Feld zu schreiben, möchte ich Tun Sie folgendes: - secret_question = forms.ModelChoiceField (queryset = SecretQuestion.objects.all()) – JohnRK

0

Der aktuelle Code sollte diesen Fehler nicht verursachen.

Der Fehler schlägt vor, dass Sie nach einem username Schlüsselwortargument zu Ihrer StudentProfile Klasse filtern, die kein username Feld entsprechend Ihrem Modell hat.

Der Fehler sollte auflisten, in welcher Zeile Ihr Code einbricht und Ihnen genau sagen, wo das geschieht - dort liegt die Antwort. Dein Code? Django-Registrierungscode? Ich weiß es nicht, bis du es gepostet hast.

FYI, dieser Fehler tritt auf, wenn Sie versuchen, ein Modell durch ein ungültiges Feld zu filtern.

MyModel.objects.filter(non_existent_field=True) # would throw this error. 

ein ungültiges Feld Passing in create verursachen würde ein TypeError

+0

Sein Code verursacht diesen Fehler, in der Zeile 'form = RegistrationForm (request.POST) '.Es ist manchmal verwirrend für Leute, die Zeilennummer mit Django zu bekommen, weil sie kein normales Python-Traceback bekommen. – agf