Как написать вид для обновления изображения модели в Django? - PullRequest
0 голосов
/ 08 декабря 2018

Я расширяю модель пользователя django моделью профиля.Я хочу добавить функцию обновления профиля пользователя.Поскольку я делаю поле num уникальным полем, в моей функции просмотра обновлений форма is_valid обновления всегда была False.Я тоже не могу обновить фото png?Вот мой код;

Модели:

class Profile(models.model):
   user = models.OneToOneField(User,on_delete=models.CASCADE)
   num =models.CharField('identity',max_length=254,unique=True)
   photo = models.ImageField('image',upload_to = 'images/licences')

формы:

class ProfileForm(forms.ModelForm):
    class Meta:
        model= Profile
        fields = ['num','photo']

просмотров:

def modify_view(request):
    user = request.user
    if request.method=="POST":
        form = ProfileForm(request.POST,request.FILES)
        if form.is_valid() 
            user_profile = Profile.objects.get(user=user)
            user_profile.image = form.clean_data['image']
            user_profile.save()
    else:
        form = ProfileForm()
        return render(request,"profile.html",{form:form}) 

шаблон

{% extends  'account/home/index.html' %}
{% block content %}
<div class="row">
    <div class="col-md-8 col-sm-8 col-8">

      <form class="signup needs-validation" id="signup_form" method="post"  enctype="multipart/form-data" >
        {% csrf_token %}
        {{form.as_p}}
        {% if redirect_field_value %}
        <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
        {% endif %}
        <div class="form-group">
            <button  type="submit" class="col-sm-8  offset-sm-4 btn btn-success btn-block">update</button> 
        </div>
      </form>
    </div>
  </div>
{% endblock %}

1 Ответ

0 голосов
/ 08 декабря 2018

Поскольку поле num уникально и не будет сгенерировано повторно при обновлении изображения профиля, вы можете проигнорировать request.POST и передать аргумент instance в класс ProfileForm.

Пример :

def modify_view(request):
    user = request.user
    if request.method=="POST":
        user_profile = Profile.objects.get(user=user)

        form = ProfileForm(files=request.FILES, instance=user_profile)
        if form.is_valid():
            user_profile.image = form.clean_data['image']
            user_profile.save()
    else:
        form = ProfileForm()
    return render(request,"profile.html",{form:form}
...