Max
Max

Reputation: 1844

Django imagefield can't assign via ModelForm

I'm creating new Contact instance and after contact = contact_form.save(commit=False) in cleaned_data['avatar'] i saw default avatar path, but in form i set another pic. Why is this happening?

Contact model:

class Contact(models.Model):
    first_name = models.CharField(max_length=60)
    last_name = models.CharField(max_length=60)
    note = models.TextField(max_length=280, blank=True)
    avatar = models.ImageField(upload_to=generate_upload_to_path, default='/contacts/default_icon.png', blank=True)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, default=None)

Contact ModelForm:

class ContactForm(forms.ModelForm):
    prefix = 'contact'

    class Meta:
        model = Contact
        exclude = ('user',)

    def __init__(self, *args, **kwargs):
        super(ContactForm, self).__init__(*args, **kwargs)
        self.fields['last_name'].widget.attrs['placeholder'] = 'Last name'
        self.fields['first_name'].widget.attrs['placeholder'] = 'First name'
        self.fields['avatar'].widget.attrs['placeholder'] = 'Avatar'

views.py

def index(request):
    if request.user.is_authenticated:
        if request.method == 'POST':
            contact_form = ContactForm(request.POST)
            phone_number_form = PhoneNumberForm(request.POST)
            email_form = EmailForm(request.POST)
            if contact_form.is_valid() and phone_number_form.is_valid() and email_form.is_valid():
                contact = contact_form.save(commit=False)
                contact.user = User.objects.get(pk=request.user.pk)
                contact.save()
                phone_number = phone_number_form.save(commit=False)
                phone_number.contact = contact
                phone_number.save()
                email = email_form.save(commit=False)
                email.contact = contact
                email.save()
                return redirect('contacts:index')

Upvotes: 0

Views: 35

Answers (1)

alexander
alexander

Reputation: 521

you must include request.FILES:

contact_form = ContactForm(request.POST, request.FILES)

docs: django file uploads

Upvotes: 1

Related Questions