2

ユーザーがプロファイルに変更を送信すると、関連するユーザー テーブルのすべてのフィールドが空白の値で上書きされるという問題があります (つまり、ユーザー名、電子メール、first_name など)。

私のサイトには、ユーザー プロファイル タイプがまったく異なる 2 種類のユーザーがいます。このため、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 からすべてのユーザー テーブル フィールドを除外しようとしましたが、もっと簡単な方法があるはずです。

何か助けはありますか?

4

1 に答える 1

0

これは設計どおりに機能しています。複数テーブルの継承では、親の属性が子で使用可能になります。子オブジェクトは、保存時にそれらを上書きできます。

さまざまなタイプのユーザーが必要な場合は、このHow to setup Django models with two types of users with very different attributesに関する最近の質問があります

于 2012-10-22T04:47:35.150 に答える