8

Django'nun standart Kullanıcı modeline bir alan eklemek için AbstractUser kullanmaya çalışıyorum. kabuğundan diyebilirim çünkü bu başarılı olmuşturVeritabanı hatası: böyle bir tablo yok: auth_user. AbstractUser'ı genişletme ve admin'e kayıt olmak için model kullanma

class GUser(AbstractUser): 
    uuid = UUIDField(auto=True) 

,

>>> a = GUser.objects.all() 

>>> a 
[<GUser: User1>] 

>>> a[0].uuid 
UUID('7d1f0b7b52144a2ea20db81ce74741e3') 

G/yöneticiden yeni bir kullanıcı kayıt edilir yaşıyorum sorun: Bu benim kodudur. İşte benim forms.py

no such table: auth_user 

İçine fazlasını elde: önce: Ben yeni bir kullanıcı oluşturmak zaman bir veritabanı hatası alıyorum

class GUserChangeForm(UserChangeForm): 
    class Meta: 
     model = get_user_model() 

class GUserCreationForm(UserCreationForm): 

    class Meta: 
     model = get_user_model() 

    def clean_username(self): 
      username = self.cleaned_data["username"] 
      try: 
       get_user_model().objects.get(username=username) 
      except get_user_model().DoesNotExist: 
       return username 
      raise forms.ValidationError(self.error_messages['duplicate']) 

Ve admin.py:

class GUserAdmin(UserAdmin): 
    form = GUserChangeForm 
    add_form = GUserCreationForm 
    fieldsets = (
     (None, {'fields': [('username', 'password')]}), 
     ('Personal info', {'fields': ('is_active','is_staff','is_superuser','groups', 'user_permissions')}), 
     ('Important dates', {'fields': ('last_login', 'date_joined')}), 
     #('Universal ID', {'fields': ('uuid')}) 
     ) 

admin.site.register(GUser,GUserAdmin) 

: (benim yaptığım gibi)

ben clean_username (öz) üzerine yazmak için bu diğer insanların başına ne zaman kendi Formlar uygulamaya okumakAncak, yöneticiden bir kullanıcı eklemeye çalıştığımda bunun gerçekleşeceğini sanmıyorum. GUserAdmin'i kaydettirmeme rağmen auth.forms.py dosyası çağırılıyor.

Ayrıca, veritabanımı (sqlite3) sildiğimde ve python manage.py syncdb öğesini çağırdığımda, bir auth_user tablosunun aslında oluşturulmadığını görüyorum.

Evet, settings.py dosyasında AUTH_USER_MODEL ekledim.

Herhangi bir yardım büyük memnuniyetle karşılanacaktır. SO mesajların ton ile birlikte https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#custom-users-and-the-built-in-auth-forms

ancak bunların hiçbiri yaşıyorum sorunu gidermek gibi görünüyor:

okudum.

+1

Bu iş parçacığı cevabınıza benziyor: https://groups.google.com/forum/#! topic/django-users/kOVEy9zYn5c Görünüşe göre, Özel Model, – karthikr

+0

yöneticisi için Meta'yı onurlandırmıyor. Bu sayfayı görmüştüm ama aynı kesin problemi yaşadığımızdan emin değildim. Çözüm, auth.forms.py dosyasındaki kodu gerçekten değiştirecek mi? – FrancescoA

+0

Sanırım Scott Anderson'ın 20 Mart'taki cevabı – karthikr

cevap

0

Bu şekilde yaptığım tüm işleri sildim ve standart kullanıcı ile ilerlemeye devam edebildim. Sonra bir gün ona geri döndüm ve bir saat içinde çalışmayı başardım. Referans için kodu göndereceğim ancak farkı yaratan şeyi kesin olarak belirleyemem. Yaratılış formlarının ve malzemelerinin gerekli olmadığını biliyorum.

models.py

class PropaUser(AbstractUser): 
    uuid = UUIDField(auto=True) 

admin.py

from django.contrib import admin 
from login.models import PropaUser 

admin.site.register(PropaUser) 

settings.py

AUTH_USER_MODEL = "login.PropaUser" 

diğer models.py

class Word(models.Model): 
    user = models.ManyToManyField(settings.AUTH_USER_MODEL) 
    deck = models.ManyToManyField(Deck) 
    word = models.CharField(max_length=100) 

    def __unicode__(self): # Python 3: def __str__(self): 
    return self.word 

Bu, çalışıyor. Daha önce tüm sorunlara neyin neden olduğunu bilmiyorum çünkü bu soruyu göndermeden önce bu yöntemi denediğimi düşünüyorum. Bu tatmin edici bir cevap olmayabilir ama bu ne işe yarıyor. Daha önce, mevcut Kullanıcıya bir alan eklemek için gerekenleri de karıştırmıştım. Budur.

+0

Şu anda aynı sorunu yaşıyorum. "UserAdmin" öğesinden devralınan bir şeyle kayıt olmadığında çalışır. 'admin.site.register (GUser, GUserAdmin)' vs. 'admin.site.register (PropaUser)' – toabi

+0

Bunu Django 1.6 ile denediğimde, doğrudan tüm alanları doğrudan düzenleyebildim. dahili şifre alanı hashed sonucu)! – aaaronic

İlgili konular