2017-08-11 74 views
0

我正在用django構建一個應用程序,我決定選擇allauth身份驗證。現在我有一個配置文件頁面,我希望用戶能夠編輯他們的帳戶以包括Bios,Last_name,first_name和thingx這樣的內容,並且可能包含顯示圖片,但是我填充了一些代碼,並且出現了一個錯誤,它很長一段時間。錯誤是allauth帳戶在django中編輯

錯誤

Traceback (most recent call last): 
    File "manage.py", line 22, in <module> 
    execute_from_command_line(sys.argv) 
    File "/Users/Olar/Desktop/arbithub/lib/python2.7/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line 
    utility.execute() 
    File "/Users/Olar/Desktop/arbithub/lib/python2.7/site-packages/django/core/management/__init__.py", line 337, in execute 
    django.setup() 
    File "/Users/Olar/Desktop/arbithub/lib/python2.7/site-packages/django/__init__.py", line 27, in setup 
    apps.populate(settings.INSTALLED_APPS) 
    File "/Users/Olar/Desktop/arbithub/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate 
    app_config.import_models() 
    File "/Users/Olar/Desktop/arbithub/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models 
    self.models_module = import_module(models_module_name) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module 
    __import__(name) 
    File "/Users/Olar/Desktop/arbithub/src/profiles/models.py", line 27, in <module> 
    class Profile(models.Model): 
    File "/Users/Olar/Desktop/arbithub/lib/python2.7/site-packages/django/db/models/base.py", line 124, in __new__ 
    new_class.add_to_class('_meta', Options(meta, app_label)) 
    File "/Users/Olar/Desktop/arbithub/lib/python2.7/site-packages/django/db/models/base.py", line 331, in add_to_class 
    value.contribute_to_class(cls, name) 
    File "/Users/Olar/Desktop/arbithub/lib/python2.7/site-packages/django/db/models/options.py", line 206, in contribute_to_class 
    raise TypeError("'class Meta' got invalid attribute(s): %s" % ','.join(meta_attrs.keys())) 
TypeError: 'class Meta' got invalid attribute(s): fields,model 

model.py

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

# Create your models here. 
class Profile(models.Model): 
    username = models.CharField(max_length=125) 
    email = models.EmailField(max_length=125) 
    first_name = models.CharField(max_length=125) 
    last_name = models.CharField(max_length=125) 

    class Meta: 
     model = User 
     fields = ('username', 'email', 'first_name', 'last_name') 

    def __str__(self): 
     return self.username 

Forms.py

from django.conf import settings 
from django.contrib.auth.models import User 
from django.contrib.auth.forms import UserCreationForm, UserChangeForm 
from profiles.models import Profile 

class UpdateProfile(forms.ModelForm): 
    username = forms.CharField(required=True) 
    email = forms.EmailField(required=True) 
    first_name = forms.CharField(required=False) 
    last_name = forms.CharField(required=False) 

    class Meta: 
     model = User 
     fields = ('username', 'email', 'first_name', 'last_name') 

    def clean_email(self): 
     username = self.cleaned_data.get('username') 
     email = self.cleaned_data.get('email') 

     if email and User.objects.filter(email=email).exclude(username=username).count(): 
      raise forms.ValidationError('This email address is already in use. Please supply a different email address.') 
     return email 

    def save(self, commit=True): 
     user = super(RegistrationForm, self).save(commit=False) 
     user.email = self.cleaned_data['email'] 

     if commit: 
      user.save() 

     return user 

這是我的代碼ABOV é與錯誤,我不能圍繞我的頭問題是什麼。任何幫助將不勝感激。

回答

1

刪除ATTRS

class Profile(models.Model): 
    # ... your code here 
    class Meta: # And this line need to remove 
     model = User # And this line need to remove 
     fields = ('username', 'email', 'first_name', 'last_name') # this line need to remove 

在模型元。如果你想擴展默認的Django用戶模型,你可以只用models options

,閱讀auth customizing

+0

所以應該在模型中 – King

+0

別人models.Model元ATTRS –

+0

沒有元我得到了以下錯誤'TypeError:'類元'有無效的屬性:模型' – King

3

此代碼

class Meta: 
    model = User 
    fields = ('username', 'email', 'first_name', 'last_name') 

不屬於您的模式湖因此,modelfields都是您模型的Meta類的無效關鍵字參數。

編輯以迴應評論:

如果你想添加更多的字段,你會增加他們對你的模型:

class MyModel(models.Model): 
    my_new_field = models.IntegerField() 

然後,在你的模型的形式,添加my_new_fieldfields參數。請注意,除非您想要執行超出您的模型提供的內容,否則只需將其添加到字段的tuple即可。換句話說,你並不需要添加:

my_new_field = forms.IntegerField() 

ModelForm神奇地爲您處理此,如文檔所示:

https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#modelform

這是使用像模型形式的東西的好處和模型視圖集。它通過重新使用模型的模式,推斷字段和字段類型,使代碼保持乾爽。

我希望能夠解決問題。

+0

好吧,它現在的作品,但如果我想添加更多字段,如Bios和圖片上傳選項。我只是將該字段添加到配置文件模型中? – King

+1

編輯回答解決此評論。 – MrName

+0

謝謝。請在我的瀏覽器中出現以下錯誤:異常值:全局名稱'UpdateProfile'未定義' – King

1

爲了您的最後一個錯誤需要更換

class UpdateProfile(forms.ModelForm): 
    # your code ... 
    def save(self, commit=True): 
     user = super(RegistrationForm, self).save(commit=False) 
     #   ^^^^^^^^^^^^^^^^^ 

class UpdateProfile(forms.ModelForm): 
    # your code ... 
    def save(self, commit=True): 
     user = super(UpdateProfile, self).save(commit=False) 
     #   ^^^^^^^^^^^^^^^^^ 

詳情working-python-super-function

+0

謝謝我不能相信我犯了這樣的錯誤,當我試圖修復以前的錯誤 – King