При обновлении модели профиля пользователя с использованием формы модели в django:
Повышение csrf token missing or incorrect
только с загрузкой файла.
В случае без прикрепленного файлаЯ могу обновить другие поля.
Это происходит при использовании django-pwa
и serviceworker.js
.
https://github.com/silviolleite/django-pwa
файл model.py:
class UserProfile(models.Model):
user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
avatar = models.ImageField(upload_to='avatars', blank=True)
first_name = models.CharField(blank=True, max_length=128)
last_name = models.CharField(blank=True, max_length=128)
birthday = models.DateField(blank=True, default='1990-12-01')
town = models.CharField(blank=True, max_length=128)
файл forms.py:
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('avatar', 'first_name', 'last_name', 'birthday', 'town')
в файле views.py:
@method_decorator(login_required, name='dispatch')
class ProfileView(FormView):
form_class = UserProfileForm
template_name = 'profiles/profile.html'
def dispatch(self, request, *args, **kwargs):
self.username = kwargs.get('username')
self.user = get_user_model().objects.get(username=self.username)
self.userprofile = UserProfile.objects.get_or_create(user=self.user)[0]
self.form = UserProfileForm({'first_name': self.userprofile.first_name,
'last_name': self.userprofile.last_name,
'avatar': self.userprofile.avatar,
'birthday': self.userprofile.birthday,
'town': self.userprofile.town)
return super().dispatch(request, *args, **kwargs)
def get_context_data(self, **kwargs):
return {'userprofile': self.userprofile, 'selecteduser': self.user, 'form': self.form}
def post(self, request, *args, **kwargs):
return super().post(request, *args, **kwargs)
def get_form(self, *args, **kwargs):
return self.form_class(self.request.POST, self.request.FILES, instance=self.userprofile)
def form_valid(self, form):
form.save(commit=True)
return redirect('profiles:profile', self.user.username)
в файле profile.html:
<form method="post" action="." enctype="multipart/form-data">
{% csrf_token %}
{{ form.non_field_errors }}
{% for field in form %}
<div class="form-group">
{{ field }}
{{ field.errors }}
</div>
{% endfor %}
<input type="submit" class="btn btn-primary" value="Update" />
</form>
и программные версии:
ubuntu 18.04
nginx 1.14.0
uwsgi 2.0.18
Django 2.2
Django-CMS 3.7
django-pwa 1.0.5
Кроме того, также в случае загрузки файла на django-cms выдается ошибка:
повышение AttributeError: 'TemporaryFileUploadHandler' object has no attribute 'file'
, а длина содержимого запроса равна нулю.
Я никогда не видел такой проблемы.
Что я должен проверить? Подскажите пожалуйста как решить.