Problem with ImageForm. cant save it to server Django

Viewed 22
IntegrityError at /profile/
(1062, "Duplicate entry '1' for key 'catalog_profile.user_id'")

The image is saved to the server (giving an error along the way), but is not written to the database, before that error i had problem with user_id in tho.save() what i must to change ?

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 (where I have problem) tho.save give me an error

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})
1 Answers

Can you show your HTML form? You need to make sure you added the attribute enctype="multipart/form-data" like this:

<form method="post" action="#" enctype="multipart/form-data">
{{ form }}
</form>

If you do not add the enctype attribute, the form will be empty.

Related