/ / Django UpdateViewプロファイル - データを保存せずに作業 - django、django-class-based-views

Django UpdateViewプロファイル - データを保存せずに作業 - django、django-class-based-views

Holla ppl。 私の新しいdjangoで新しいことをしようとしていますが、この時点で私は固執して助けが必要です。 事は:私はテンプレートを介して私のユーザープロファイルを更新できません。私はいくつかの変更を行う---私はPOSTを見ることができるコンソールで、その後、私は "success_url"でリダイレクトを取得します。エラーは表示されませんが、新しいデータは保存されません。 ジャンゴ1.11.4

ここに私のコード:

モデル:

class Profile(models.Model):
user       = models.OneToOneField(User, on_delete=models.CASCADE)
avatar = models.ImageField(blank=True)
location = models.CharField(max_length=30, blank=True)
bio        = models.TextField(max_length=500, blank=True)
active     = models.BooleanField(default=True)
timestamp  = models.DateTimeField(auto_now_add=True)

def __str__(self):
return self.user.username

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()

再生回数:

class RegisterView(CreateView):
template_name = "registration/register.html"
form_class = RegisterForm
success_url = "/"

def dispatch(self, *args, **kwargs):
# if self.request.user.is_authenticated():
#     return redirect("/logout")
return super(RegisterView, self).dispatch(*args, **kwargs)


class ProfileUpdateView(UpdateView):
model = Profile
form_class = ProfileForm
template_name = "profiles/profile-detail-update.html"
success_url = "/"

def get_object(self, **kwargs):
username = self.kwargs.get("username")
if username is None:
raise Http404
return get_object_or_404(User, username__iexact=username)

フォーム

class RegisterForm(forms.ModelForm):
password1 = forms.CharField(label="Password", widget=forms.PasswordInput)
password2 = forms.CharField(label="Password confirmation", widget=forms.PasswordInput)

class Meta:
model = User
fields = ("username",)

def clean_password2(self):
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
raise forms.ValidationError("Passwords don"t match")
return password2

def save(self, commit=True):
user = super(RegisterForm, self).save(commit=True)
user.set_password(self.cleaned_data["password1"])
if commit:
user.save()
return user

class ProfileForm(forms.ModelForm):

class Meta:
model = Profile
fields = ("avatar", "location", "bio", "active",)

URL

url(r"^(?P<username>[w-]+)/$", ProfileUpdateView.as_view(), name="update"),

テンプレート:

{% extends "base.html" %}

{% block content %}
<p>name: {{ user.username }}</p>
<p>location: {{ user.profile.location }}</p>
{% if user.profile.avatar %}
<img style="width: 200px" src="/images/{{ user.profile.avatar.url }}"/>
{% endif %}
<hr/>
{% include "snippets/form.html" %}
{% endblock %}

含まれるスニペット:

<div class="form pt-2">
{% if form.errors.non_field_errors %}
{{ form.errors.non_field_errors }}
{% endif %}
<form method="POST" action="" enctype="multipart/form-data"> {% csrf_token %}
{{ form.as_p }}
<button class="btn btn-success" type="submit">Save</button>
<button onclick="window.history.back();" class="btn btn-danger" type="button">Go back</button>
</form>
</div>

SOS。

回答:

回答№1は1

あなたの ProfileUpdateView あなたは User インスタンスをフォームの代わりに Profile インスタンス:

class ProfileUpdateView(UpdateView):
# ...

def get_object(self, **kwargs):
username = self.kwargs.get("username")
if username is None:
raise Http404
return get_object_or_404(Profile, user__username__iexact=username)