Django - опрос - перечисление вариантов выбора на основе данных пользователя при входе в систему
Hy,
Я создал опрос и страница опроса может быть доступна только если у пользователя есть magiclink (сделанный с помощью django-sesame). После открытия страницы с помощью этой магической ссылки я знаю, кто является пользователем, потому что когда генерируется ссылка, она включает информацию о пользователе и включает в эту ссылку.
Объекты/варианты (participanti) опроса содержат поле/значение name и departemnt (dep_participant). Пользователи также имеют и значение departemnt (departament).
Итак, проблема/вопрос: на странице опроса я хочу показать имя и отдел для всех предложений/выборов (participanti), кроме предложений/выборов (participanti) с тем же отделом, что и у вошедшего пользователя. Я не знаю, как сделать запрос в представлении или forloop в шаблоне с этим правилом.
Другими словами: если пользователь вошел в систему из отдела "hr", я хочу показать в шаблоне все варианты выбора/опции из этого опроса для всех отделов, кроме отдела "hr". Пожалуйста, помогите мне с решением. Спасибо
Ниже приведены мои настройки
users models.py
class UserVot(AbstractUser):
departament = models.CharField(max_length=100, null=True, blank=True)
rol = models.CharField(max_length=100, null=True, blank=True)
poll models.py
class Campanie(models.Model):
.....
class Participanti(models.Model):
campanievot = models.ForeignKey(Campanie, on_delete=models.CASCADE)
nume_participant = models.CharField(max_length=200, verbose_name='nume')
dep_participant = models.CharField(max_length=200, verbose_name='departament')
votes = models.IntegerField(default=0)
def __str__(self):
return self.nume_participant
class Meta:
verbose_name = 'Participanti'
verbose_name_plural = 'Participanti'
views.py
@authenticate
def votare_campanie(request):
campanie = get_object_or_404(Campanie)
try:
participant_votat = campanie.participanti_set.get(pk=request.POST['participanti'])
except (KeyError, Participanti.DoesNotExist):
return render(request, 'campanievot/campanie.html', {
'campanie' : campanie,
'error_message' : "Trebuie sa votezi cel putin un coleg",
})
else:
participant_votat.votes += 1
participant_votat.save()
messages.success(request, "Multumim pentru feedback!")
return redirect('campanievot:index')
template.html
<form action=" {% url 'campanievot:votare_campanie' %} " method="post" >
{% csrf_token %}
{% for p in campanie.participanti_set.all %}
<label for="p{{ forloop.counter }}" class="form-check custom-icon mt-2 mb-4" role="button">
<input type="radio" name="participanti" class="form-check-input" id="p{{ forloop.counter }}"
value="{{ p.id }}">
<span class="form-check-label">
<span class="content">
<span for="p{{ forloop.counter }}" class="heading mb-1 d-block lh-1-25">{{p.nume_participant }} {{ p.dep_participant }}</span>
<!-- <span class="d-block text-small text-muted">04.05.2021 - 12:00 </span> -->
</span>
</span>
</label>
{% endfor %}
{{form.media}}
<button class="m-auto btn btn-icon btn-icon-start btn-primary mb-1" type="submit">
<i data-acorn-icon="send"></i>
<span>Trimite</span>
</button>
</form>
Я стараюсь в виду с
try:
participant_votat = campanie.participanti_set.get(pk=request.POST['participanti']).exclude(participanti__dep_participant=request.uservot.departament)
но не работает, показывает все варианты/выборы. Пожалуйста, помогите мне с решением.
Я нашел решение. В шаблоне я установил оператор "if" следующим образом
{% for p in campanie.participanti_set.all %}
{% if p.dep_participant == request.user.departament %}
{% else %}
<label for="p{{ forloop.counter }}" class="form-check custom-icon mt-2 mb-4" role="button">
<input type="radio" name="participanti" class="form-check-input" id="p{{ forloop.counter }}"
value="{{ p.id }}">
<span class="form-check-label">
<span class="content">
<span for="p{{ forloop.counter }}" class="heading mb-1 d-block lh-1-25">{{p.nume_participant }} {{ p.dep_participant }}</span>
<!-- <span class="d-block text-small text-muted">04.05.2021 - 12:00 </span> -->
</span>
</span>
</label>
{% endif %}
{% endfor %}
{{form.media}}