Проблема с ImageForm. не удается сохранить его на сервере Django
IntegrityError at /profile/ (1062, "Дублирующая запись '1' для ключа 'catalog_profile.user_id'")
Изображение сохраняется на сервере (выдавая по пути ошибку), но не записывается в базу данных, до этой ошибки у меня была проблема с user_id в tho.save(). что я должен изменить?
models.py
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save, pre_save
from django.dispatch import receiver
class Clan(models.Model):
clan_name = models.CharField(max_length=40)
clan_tag = models.CharField(max_length=5)
clan_exp = models.IntegerField(default=0)
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
kills = models.IntegerField(default=0)
exp = models.IntegerField(default=0)
tokens = models.IntegerField(default=0)
coins = models.IntegerField(default=0)
chanks = models.IntegerField(default=0)
privilege = models.CharField(max_length=15)
clan = models.ForeignKey(Clan, blank=True, null=True, on_delete=models.SET_NULL)
skin = models.ImageField(default='default.png', null=True)
@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()
forms.py
from django import forms
from.models import Profile, User
class SkinForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('skin',)
labels = {'skin': '',}
#exclude = ('user',)
widgets = {
'skin': forms.FileInput(attrs={'class': 'file_input', 'placeholder': ''}),
}
views.py (где у меня проблема) tho.save дает мне ошибку
def profile(request):
if request.method == "POST":
form = SkinForm(request.POST, request.FILES)
u = request.FILES['skin']
if form.is_valid():
tho = form.save(commit=False)
tho.user = request.user.profile.user
tho.save()
return render(request, 'profile.html', context={'skin': skin, 'form': SkinForm})
else:
return render(request, 'profile.html', context={'skin': skin, 'form': SkinForm, 'code': 1})
return render(request, 'profile.html', context={'skin': skin, 'form': SkinForm})
Я вижу вашу html-форму? Вам нужно добавить атрибут enctype = multipart/form-data
<form method="post" action="#" enctype="multipart/form-data">
{{форма }}
Если не добавить атрибут enctype, форма будет пустой