Необходимо условие, при котором пользователь не может пожаловаться на себя в Django

This is a Complain form where a logged in user can submit. I want a condition in views.py file, where a logged in user can't submit a complain form against himself. 

***views.py file:***

def complain(request):
    
    if request.method=='POST':  
            
            email = request.POST['email']
            complain = request.POST['complain']
            against = request.POST['against']
            image = request.FILES.get('image')


            if User.objects.filter(username = against).exists():
                
                    complain = Complain(email = email,  complain=complain, against = against, 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')

---- Пожалуйста, помогите найти условие, при котором зарегистрированный пользователь не может отправить форму, набрав свое имя пользователя или адрес электронной почты в поле 'Against'.

***Model.py file:***

class Complain(models.Model):
         email = models.EmailField(max_length=100)
         complain = models.CharField(max_length=200)
         against = 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 

---- Пожалуйста, помогите найти условие, при котором зарегистрированный пользователь не может отправить форму, набрав свое имя пользователя или адрес электронной почты в поле 'Against'.

**Complain Form (Complain.html):**

<div class="container mt-5">
    <div class="heading1">Complain Form</div>
<br>
    {%for message in messages%}

      <p style= "text-align:center ;font-weight: bold; color: rgb(48, 167, 247); font-size: 21px;"> 
        {{message}} 
      </p>

      {% endfor %}
    <div class="form mt-5">

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

    {% csrf_token %}

    {% comment %} ID: &nbsp; <input type="number" name="id"  required/> <br /><br />  {% endcomment %}

    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 (Must include Name & Position): &nbsp; 
    <input
    type="text" name="against"  required/><br/><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 mt-5"
  style="border-radius: 16px"
  type="submit">Submit</button>

</form>

---- Пожалуйста, помогите найти условие, при котором зарегистрированный пользователь не может отправить форму, набрав свое имя пользователя или адрес электронной почты в поле 'Against'.

Вы можете добавить условие к вашему представлению, которое проверяет пользователя запроса и пользователя, на которого жалуются. Если они совпадают, вы можете перенаправить или отобразить шаблон с сообщением об ошибке.

Например:

def complain(request, user_id):
    if request.user.id == user_id:
        # redirect or render error template
    else:
        # continue with view logic

Попробуйте следующее:

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

        if user.first() is not None:
                if request.user == user.first():
                    # raise error
                    pass
                complain = Complain(email = email,  complain=complain, against = against, 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')
Вернуться на верх