8

पर पंजीकरण करने के लिए मॉडल का उपयोग करना मैं Django के मानक उपयोगकर्ता मॉडल में फ़ील्ड जोड़ने के लिए AbstractUser का उपयोग करने का प्रयास कर रहा हूं।डेटाबेस त्रुटि: ऐसी कोई तालिका नहीं: auth_user। एस्ट्रस्ट्रसर का विस्तार करना और व्यवस्थापक

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

यह सफल रहा है क्योंकि खोल से मैं कह सकता हूँ,

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

>>> a 
[<GUser: User1>] 

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

समस्या मैं/व्यवस्थापक से एक नया उपयोगकर्ता दर्ज की है हो रहा है: यह मेरा कोड है।

no such table: auth_user 

इससे पहले कि मैं इस पर और अधिक मिलता है, यहाँ मेरी forms.py है: जब मैं एक नया उपयोगकर्ता बनाने मैं एक डाटाबेस त्रुटि मिलती है

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']) 

और मेरे 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) 

मैंने पढ़ा है कि जब यह अन्य लोगों के साथ हुआ है वे अपने स्वयं के फार्म को लागू किया है (जैसा कि मैंने किया था) clean_username (स्वयं) अधिलेखित करने के लिए:

हालांकि मुझे नहीं लगता कि जब मैं व्यवस्थापक से उपयोगकर्ता को जोड़ने का प्रयास करता हूं तो यह कॉल हो रहा है। Auth.forms.py फ़ाइल को कॉल किया जा रहा है भले ही मैं अपना GUSerAdmin पंजीकृत करता हूं।

इसके अलावा, जब मैं अपना डेटाबेस (sqlite3) हटाता हूं और फिर python manage.py syncdb को कॉल करता हूं, तो मुझे लगता है कि auth_user तालिका वास्तव में नहीं बनाई जा रही है।

हां, मैंने settings.py में AUTH_USER_MODEL शामिल किया है।

किसी भी मदद की सराहना की जाएगी।

मैंने पढ़ लिया है: https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#custom-users-and-the-built-in-auth-forms

अतः पदों के टन के साथ साथ लेकिन उनमें से कोई मुद्दा मैं हो रही है ठीक करने के लिए लग रहे हैं।

+1

ऐसा लगता है कि इस धागे का आपका जवाब है: https://groups.google।कॉम/फोरम/#! विषय/django-users/kOVEy9zYn5c स्पष्ट रूप से, कस्टम मॉडल प्रबंधक – karthikr

+0

@ karthikr के लिए 'मेटा' का सम्मान नहीं करता है, मैंने उस पृष्ठ को देखा था, लेकिन यह सुनिश्चित नहीं था कि हमें एक ही सटीक समस्या हो रही है। वास्तव में कोड auth.forms.py में कोड बदलने का समाधान है? – FrancescoA

+0

मुझे लगता है कि यह स्कॉट एंडरसन का जवाब 20 मार्च – karthikr

उत्तर

0

तो मैंने इसके साथ किए गए सभी कार्यों को हटा दिया और मानक उपयोगकर्ता के साथ आगे बढ़े ताकि मैं प्रगति कर सकूं। फिर एक दिन मैं उस पर वापस गया और इसे एक घंटे में काम करने में कामयाब रहा। मैं संदर्भ के लिए कोड पोस्ट करूंगा लेकिन मैं वास्तव में पिन को इंगित नहीं कर सकता कि क्या अंतर आया। मुझे पता है कि निर्माण के रूप और सामान आवश्यक नहीं थे।

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" 

अन्य 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 

यह वही है जो काम कर रहा है। मुझे नहीं पता कि इससे पहले सभी मुद्दों का क्या कारण हो रहा था क्योंकि मुझे लगता है कि मैंने इस सवाल को पोस्ट करने से पहले इस विधि की कोशिश की थी। यह एक संतोषजनक उत्तर नहीं हो सकता है लेकिन यह वही है जो काम कर रहा है। इससे पहले मैं इस बारे में भी उलझन में था कि मौजूदा उपयोगकर्ता को फ़ील्ड जोड़ने के लिए क्या होता है। यह बात है।

+0

मुझे अभी भी यही समस्या है। यह तब काम करता है जब कोई "UserAdmin" से विरासत में कुछ प्राप्त नहीं करता है। 'admin.site.register (GUser, GUserAdmin)' बनाम 'admin.site.register (PropaUser)' – toabi

+0

जब मैंने Django 1.6 के साथ यह कोशिश की, तो मैं सीधे सभी फ़ील्ड को सीधे संपादित करने में सक्षम रहा (सहित अंतर्निहित पासवर्ड फ़ील्ड के हैंडहेड परिणाम)! – aaaronic

संबंधित मुद्दे