class CustomAccount(models.Model):
user = models.OneToOneField("auth.User")
role = models.CharField(max_length = 50, default = 'student', choices=APPROVAL_CHOICES)
balance = models.FloatField(default = 0)
timezone = models.CharField(max_length = 200)
def __str__(self):
return self.user.username +" ["+ self.role + "]"
class CustomAccountForm(forms.ModelForm):
username = forms.CharField(max_length=30)
email = forms.EmailField(max_length=255)
password1 = forms.CharField(label= "Password",widget=forms.PasswordInput())
password2 = forms.CharField(label="Password confirmation", widget=forms.PasswordInput , help_text="Enter the same password as above, for verification.")
def save(self, commit= True):
user = User.objects.create_user(username = self.cleaned_data['username'], email = self.cleaned_data['email'] , password = self.cleaned_data['password1'])
user.save()
self.user = user
return super(CustomAccountForm, self).save(commit=commit)
def clean_username(self):
username = self.cleaned_data["username"]
try:
User.objects.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError("A user with that username already exists.")
def clean_password2(self):
password1 = self.cleaned_data.get("password1", "")
password2 = self.cleaned_data["password2"]
if password1 != password2:
raise forms.ValidationError("The two password fields didn't match.")
return password2
def clean_email(self):
email = self.cleaned_data["email"]
try:
User.objects.get(email=email)
except User.DoesNotExist:
return email
raise forms.ValidationError("A user with that emailaddress already exists.")
class Meta:
model = CustomAccount
exclude = ['balance','user']
Ich möchte benutzerdefinierte Konto in Django Admin-Abschnitt mit einzelnen Formular erstellen, die Felder von auth.User und CustomAccount Model hat. Ich habe immer Fehler IntegrityError bei/admin/myLogin/customaccount/add/ NOT NULL fehlgeschlagen: mylogin_customaccount.user_idSo füllen Sie zwei Modelle mit einzelnen Formular
Haben Sie in diesem Kundenkonto Tabelle vor bevölkerten Daten haben? –
Ja, ich habe zwei Objekte –
Wenn der Benutzer ein Fremdschlüssel ist, könnte ich vorschlagen, dass Sie im Benutzerfeld 'null = True' hinzufügen. Wenn Sie OneToOne mit dem Benutzer verbinden, können Sie nicht 'null = True' anwenden, ich würde vorschlagen, dass Sie die zwei Datensätze in der Datenbank löschen und versuchen, die Migration anzuwenden –