Как обновить данные формы в Django?


Это файл жалоб, в котором пользователь может отправить свою форму жалобы. Мне нужно обновить эту запись с помощью кнопки Update в DJANGO.

файлcomplain.html:

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

{% csrf_token %}

Email: &nbsp; <input type="email" name="email"  required/> <br /><br />

What is the complain: &nbsp; <input type="text" name="complain"  required/><br /><br />

Who's against the complain (Enter Userame): &nbsp; 
<input
type="text" name="against"  required/><br/><br/>


Position of the person you are complaining against: &nbsp; 
<input
type="text" name="position"  required/><br/> <br/>


<div class="mb-3">
<label class="form-label">Evidence</label>
<input class="form-control-file" type="file" name="image" required />
           
 </div>

</div>


<div class="mt-1" style="text-align: center">

<button class="btn btn-danger type="submit"> Submit </button>
<button class="btn btn-danger type="submit"> Update </button>


</form>

Мне нужно обновить эту запись с помощью кнопки Update в DJANGO

views.py :

def complain(request):

if request.method=='POST':  
    
        email = request.POST['email']
        complain = request.POST['complain']
        against = request.POST['against']
        position = request.POST['position']
        image = request.FILES.get('image')
        user = User.objects.filter(username = against)

        if user.first() is not None:
            if request.user == user.first():
                    messages.error(request, 'You are complaining against Yourself :o ')
                    return redirect('complain')

                    pass

            if User.objects.filter(username = against).exists():    
                complain = Complain(email = email,  complain=complain, against = against, position = position, image=image)
                complain.save()
                messages.success(request, 'Complain Submit Successful')
                return redirect('complain')


        else:
                messages.error(request, 'You are complaining against Non-User (-,-)')
                return redirect('complain')

else:
    return render(request,'complain.html')

Это Models.py для Complain. Данные будут храниться здесь.

Models.py :

     class Complain(models.Model):

     email = models.EmailField(max_length=100)
     complain = models.CharField(max_length=200)
     against = models.CharField(max_length=200)
     position = models.CharField(max_length=200)
     image =  models.ImageField(upload_to = 'static', null=True, blank=True, default='2.png')
     class Meta:
        db_table = "Complain"
     def __str__(self) :
         return self.email 

сначала отправьте контекстную переменную идентификатора жалобы в этот шаблон, если вы хотите обновить жалобу, так что жалоба будет обновлена по этому идентификатору во-вторых, обновите шаблон

@if(complain_id)
<input type="hidden" name="complain_id" value={{ complain_id }}>
<button name="update" class="btn btn-danger type="submit"> Update </button>
@else
<button class="btn btn-danger type="submit"> Submit </button>
@endif

в views.py обновить свое User.objects.filter(username = against).exists() состояние

if User.objects.filter(username=against).exists():
    form_data = {'email': email, 'complain': complain, 'against': against, 'position': position, 'image': image}
    if request.POST.get('update'):
        complain = Complain.objects.filter(id=request.POST.get('complain_id'))
        complain.update(**form_data)
        messages.success(request, 'Complain Submit Successful')
    elif request.POST.get('submit'):
        complain = Complain(**form_data)
        complain.save()
        messages.success(request, 'Complain Updated Successful')
    return redirect('complain')
Вернуться на верх