How to Update this form data in Django?


This is the complain file where User can submit their complain form. I need to update this record via Update button in DJANGO.

complain.html file:

<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>

I need to update this record via Update button in 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')

This is the Models.py for Complain. Data will be stored here.

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 

Upvotes: 0

Views: 2420

Answers (1)

Rajeel Rajput
Rajeel Rajput

Reputation: 121

first send context variable of complain id to this template if you want to update a complain, so the complain will update against this id 2nd, update the template

@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

in views.py update your User.objects.filter(username = against).exists() condition

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')

Upvotes: 0

Related Questions