Необходимо условие, при котором пользователь не может пожаловаться на себя в 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: <input type="number" name="id" required/> <br /><br /> {% endcomment %}
Email: <input type="email" name="email" required/> <br /><br />
What is the complain: <input type="text" name="complain" required/><br /><br />
Who's against the complain (Must include Name & Position):
<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')