не добавляется картинка в бд только выводится дефолтная из бд

Рейтинг: -1Ответов: 1Опубликовано: 24.06.2023
                        {% csrf_token %}
                        <div class="modal-body">
                            <div class="mb-3">
                                <div class="mb-3">
                                    <label for="formFileSm" class="form-label">Главное фото профиля</label>
                                    <input class="form-control form-control-sm" name="myfile1" id="formFileSm" type="file">                                                                  
                                </div>
                            </div>
                        </div>
                        <div class="modal-footer">
                            <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
                            <button type="submit" class="btn btn-primary">Сохранить</button>
                        </div>
                    </form>
   (это views.py)

    def mprofil(request):
    if request.method == 'POST':
        profile_form = UpdateProfileForm(request.POST, request.FILES)

        if profile_form.is_valid():
            profile_form.save()
            messages.success(request, 'Your profile is updated successfully')
            return redirect('mprofil')
   
    return render(request, 'board/mprofil.html'
(это views.py/\)




    class Profile(models.Model):
    BLOOD_TYPES_CHOICES = [('В активном поиске', 'В активном поиске'),('Встречаюсь', 'Встречаюсь'),('Женат', 'Женат'),('Замужем', 'Замужем'),('Всё сложно', 'Всё сложно'),]
    operat = Sitylist.objects.all()
    INTEGER_CHOICES= [tuple([str(x.sityname), str(x.sityname)]) for x in operat]
    avatar = models.ImageField(default='default.jpg', upload_to='profile_images')
    
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    birth_date = models.DateField(null=True, blank=True)
    osebe = models.TextField(max_length=300, blank=True)
    sity = models.TextField('sity', max_length=30,blank=False,choices=INTEGER_CHOICES)
    blood_type = models.CharField('Blood Type', max_length=20,blank=False,choices=BLOOD_TYPES_CHOICES)

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

    def save(self, *args, **kwargs):
        super().save()
        img = Image.open(self.avatar.path)
        if img.height > 100 or img.width > 100:
            new_img = (100, 100)
            img.thumbnail(new_img)
            img.save(self.avatar.path)
(это models.py /\)

    class UserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('last_name', 'first_name', 'email',)
        widgets = {
            'last_name': forms.TextInput(attrs={'class': 'form-control'}),
            'first_name': forms.TextInput(attrs={'class': 'form-control'}),
            'email': forms.TextInput(attrs={'class': 'form-control '}),
        }


class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ('sity', 'birth_date','blood_type','osebe',)
        
        widgets = {
            'blood_type': forms.Select(attrs={'class': 'form-control'}),
            'sity': forms.Select(attrs={'class': 'form-control'}),
            'birth_date': forms.DateInput(attrs={'type': 'date', 'placeholder': 'yyyy-mm-dd (DOB)', 'class': 'form-control'}),
            'osebe': forms.Textarea(attrs={'class': 'form-control','rows':'4','style':'resize:none'}),
            }
        
class UpdateProfileForm(forms.ModelForm):
    avatar = forms.ImageField(widget=forms.FileInput(attrs={'class': 'form-control-file'}))

    class Meta:
        model = Profile
        fields = ['avatar',]
 (это forms.py /\) ```

Ответы

▲ 0

не увидел URL. Но зачастую такая ошибка фиксится добавлением вот такого кода в URL.

from django.urls import path, include
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
   path('admin/', admin.site.urls),
   path('', include('main.urls')),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

if settings.DEBUG:
    urlpatterns += staticfiles_urlpatterns() + static(settings.MEDIA_URL, 
document_root=settings.MEDIA_ROOT)

Так же если ты хочешь сохранять статику, тебе нужно указать путь - где она будет храниться.

# settings.py
STATIC_URL = '/static/'

MEDIA_URL = '/images/'

STATICFILES_DIRS = [
     os.path.join(BASE_DIR, 'static')
]
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/images')

К тому, же не увидел полную form в HTML, надо точно так же указывать в нем, по мимо метода POST, то что через него загружается STATICs

<form method="POST" enctype="multipart/form-data">