User
モデル用にUpdateView UpdateAccountView
を作成しています。これは、既に新しいユーザーの作成に使用されているModelForm MyUserCreationForm
です。問題は、[Submit]をクリックしてテンプレートの変更を保存するたびに、テンプレートが再レンダリングされることです。Django UpdateViewは、ModelFormを使用して新規ユーザーか既存ユーザーかを保存しない
たとえば、私がフィールドを変更しなかった場合、「Username is already taken」というエラーが表示されます。MyUserCreationForm
で一意のユーザー名を確認するか、新しいエントリのテンプレートを再レンダリングします実際にはモデルに変更を保存する必要はありません。ここで
はしかし、私が直接UpdateView
にモデルとフィールドを使用してモデルを更新した場合、それが動作する私のMyUserCreationForm
class MyUserCreationForm(UserCreationForm):
class Meta:
model = User #extended from auth.models.User
fields = ("first_name", "last_name", "username", "email", "gender", "profile_photo")
# adding bootstrap styling to the ModelForm fields
def __init__(self, *args, **kwargs):
super(MyUserCreationForm, self).__init__(*args, **kwargs)
for field in iter(self.fields):
self.fields[field].widget.attrs.update({
'class': 'form-control input-lg',
'placeholder': field.replace("_", " ").title(),
'tabindex': list(self.fields).index(field) + 1})
self.fields[field].widget.attrs.pop('autofocus', None)
if field == 'username' or field == 'email':
self.fields[field].widget.attrs.update({
'placeholder': field.replace("_", " ").title() + ' *',
})
def clean_username(self):
username = self.cleaned_data['username']
if not re.search(r'^[\w.-]+$', username):
raise forms.ValidationError('Username can only contain alphanumeric characters, dots, hyphens ,and underscores')
try:
User.objects.get(username=username)
except ObjectDoesNotExist:
return username
raise forms.ValidationError('Username is already taken.')
であり、ここで、ビュークラスであるUpdateAccountView
class UpdateAccountView(UpdateView):
form_class = MyUserCreationForm
model = User
template_name = 'auth/account-edit.html'
success_url = '/'
def get_object(self, queryset=None):
return self.request.user
良い。しかしレンダリング時にスタイルを制御できるようにするには、ModelForm
でそれを行う必要があります。
私は問題がModelForm
にあることを知っていますが、多くを検索してもそれを見つけることはできません。
ありがとうございます。
オブジェクトを更新するために作成フォームを使用するのは実際には意味がありません。特に、 'UserCreation'フォームはパスワードを設定するコードを持っています。問題を引き起こす可能性があります。テンプレートのスタイルを決めるコードを別のミックスインに分解する方がよいかもしれません。 – Alasdair
私が知っていれば、私はむしろこのオプションのために行くだろう。私は、ModelFormの 'init'ウィジェットからスタイルを分離する方が良いと言います。 mixinでmodelformのスタイルを設定する方法を教えてください。 – Khaled
私はできません - "他のコード"が何であるか分かりません – Alasdair