2012-10-22 38 views
2

我有一個問題,當用戶提交更改他們的個人資料,相關的用戶表中有空白值覆蓋所有字段(即當用戶表中的數據:用戶名,電子郵件,FIRST_NAME ...等)擴展Django的用戶配置文件過寫入提交

我的網站有完全不同的用戶配置文件的類型兩種類型的用戶,因爲這個原因,我不能使用用戶配置文件settings.py中設定,除非有人知道如何使工作?

在我的models.py(簡化,但向用戶展示模型繼承):

class UserProfile(User): 
    somevar = models.CharField(max_length=30) 
    objects = UserManager() 

class ProfileForm(ModelForm): 
    class Meta: 
     model = UserProfile 

class UserForm(ModelForm): 

    password2 = forms.CharField(widget=forms.PasswordInput()) 
    remail = forms.CharField(max_length=75) 

    class Meta: 
     model = UserProfile 
     widgets = {'password': forms.PasswordInput()} 
     fields = ('email', 'password') 

在我views.py:

@login_required 
def profile_data(request): 
    """ 
     enter user profile data 
    """ 

    if request.method == 'POST': # submission/data change 
     user = UserProfile.objects.get(pk=request.user.id) 
     form = ProfileForm(request.POST, instance=user) 

     if form.is_valid(): 
      form.save() 

     return render(request, 'users/profile_edit.html', {'form': form}) 

    else: # no data entered = fill all users data in 
     form = ProfileForm(initial=model_to_dict(UserProfile.objects.get(id=request.user.id))) 

    return render(request, 'users/profile_edit.html', {'form': form}) 

的問題是,如果表單有效且表單保存時,它將通過使所有值爲空來影響該用戶的用戶表,因爲這些屬性在表單模型中不包含任何數據。我試過排除ProfileForm中的所有用戶表字段,但似乎應該有一個更簡單的方法。

任何幫助?

回答

0

這是事先設計好的。在multiple table inheritance中,父項的屬性在子項中可用。子對象可以在保存時覆蓋它們。

如果你希望有不同類型的用戶,這裏是對此How to set up Django models with two types of users with very different attributes

+0

感謝您的答覆@Rohan最近的問題。在UserProfile繼承User模型而不是做一對一參考時,這是不可能的?在我看來,如果不繼承,網站功能將會丟失。 – devinjames

+0

@DevinS,多重繼承與onetoone關係相同。 – Rohan

+0

我做了一些閱讀和理解,我在考慮ForeignKey,因爲我沒有理由使用OneToOneField。謝謝! – devinjames