2013-06-06 30 views
11

Ben özel kullanıcı olarak aşağıda modele sahip mevcut değil iyi çalışıyor, ancak bir kullanıcı eklediğimde, aşağıdaki hatayı alıyorum aşağıdaki hatayı aldımDjango özel kullanıcı modeli ilişki "auth_user"

Exception Value: 
relation "auth_user" does not exist 
LINE 1: ...user"."is_active", "auth_user"."date_joined" FROM "auth_user... 

cevap

27

Kazı yaptıktan sonra bunu buldum

https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#custom-users-and-the-built-in-auth-forms

suçlu django.contrib.auth.forms.py içinde UserCreationForm içinde bir fonksiyonu clean_username olup. Birkaç biletler yaratılmıştır, ancak görünüşe sürdürücüler bir kusur olduğunu sanmıyorum:

https://code.djangoproject.com/ticket/20188

https://code.djangoproject.com/ticket/20086

def clean_username(self): 
     # Since User.username is unique, this check is redundant, 
     # but it sets a nicer error message than the ORM. See #13147. 
     username = self.cleaned_data["username"] 
     try: 
      User._default_manager.get(username=username) 
     except User.DoesNotExist: 
      return username 
     raise forms.ValidationError(self.error_messages['duplicate_username']) 

bu dosyada User doğrudan yerleşik kullanıcı modeline başvuruda bulunuyor. Düzeltmek için

, benim özel

from models import User #you can use get_user_model 
from django.contrib.auth.forms import UserCreationForm 
from django.contrib.auth.admin import UserAdmin 
from django.contrib.auth import forms 

class MyUserCreationForm(UserCreationForm): 
    def clean_username(self): 
     # Since User.username is unique, this check is redundant, 
     # but it sets a nicer error message than the ORM. See #13147. 
     username = self.cleaned_data["username"] 
     try: 
      User._default_manager.get(username=username) 
     except User.DoesNotExist: 
      return username 
     raise forms.ValidationError(self.error_messages['duplicate_username']) 

    class Meta(UserCreationForm.Meta): 
     model = User 

class MyUserAdmin(UserAdmin): 
    add_form = MyUserCreationForm 

admin.site.register(User,MyUserAdmin) 

oluşturur oluşturulan Yoksa User değişkeni yerine orijinal UserCreationForm yama maymun deneyebilirsiniz.

+1

Güzel yakalama. Kullanıcı modelini genişlettiğinizde bu sınıfları doğru bir şekilde kullanmanız için sizi cesaretlendiren Django dokümanlar göz önünde bulundurulduğunda bu kesinlikle ele alınmalıdır. – dustinfarris

+1

Sadece aradığım çözüm. – Charlesliam

+1

Günümü kurtardı! – neelix

4

Bunun nedeni, taşıma işleminin yapılmamasıdır. Bu sorun aşağıdaki komutu çalıştırarak benim için çözülene:

piton manage.py syncdb

3

Django 1.8

Eğer uygulaması henüz contrib.auth olarak da sorunu olabilir o zaman bu göçler kullanmıyor onları kullanır. Uygulamam için geçişlerin etkinleştirilmesi, benim için çözdü.

$ ./manage.py makemigrations <my_app> 
$ ./manage.py migrate 
+0

kırıktır. Aklımı kurtardınız. Görünüşe göre, geçişleri silerseniz, taşıma klasörünü ve '__init__.aksi takdirde Django, ilk geçişi oluşturamaz ve sonradan 'göçme' başarısız olur. –

İlgili konular