Я использую Python3.7, Django 2.2.
Ниже вы можете найти мой код, чтобы лучше понять мою проблему.
Как вы можете видеть мой код ниже, я создал таблицу с некоторыми записями. Пропустите польское имя значений в models.py. Мы должны сосредоточиться только на manager_accpt. Это значение имеет 2 аргумента (проверьте файл choices.py).
Когда я создаю представление с помощью def manager_day_free_accpt, я получаю несколько объектов. Последний столбец содержит выбор, который мой пользователь должен выбрать и сохранить. Пример, который я привел на экране ниже.
В чем моя проблема
Я должен сделать это двумя способами, потому что пользователь сам выберет, какое решение более удобно для них :)
У меня проблема с кнопками, куда их поставить? Потому что сейчас субмиссия изменяет целые объекты, но с неправильными значениями.
Когда я помещаю Кнопки снаружи "для цикла", ничего не происходит с объектами. Можете ли вы помочь мне, я должен найти два решения для этого:
первый:
Каждая строка должна содержать зеленую кнопку с подтверждением и отклонением (белая кнопка). И когда пользователь нажимает зеленую кнопку, значение только в этом необработанном тексте должно обновлять объекты в БД.
2-й соль:
Пользователь выбирает принять и отклонить в каждой строке. После этого пользователь должен нажать кнопку подтверждения, и все изменения должны обновить объекты в БД.
models.py
class Wniosek_urlop(models.Model):
data_zloz_wniosku = models.DateTimeField(auto_now_add=True, null=True)
data_start_urlop = models.DateField('Urlop od', blank=False, null=True)
data_end_urlop = models.DateField('Urlop do', blank=False,null=True)
#Representant - osoba zastepująca w tym czasie nieobecnego pracownika.
representant = models.CharField('Zastępca', max_length=50, null=False,blank=False,
help_text="Podaj imie i nazwisko osoby zastępującej Cię w czasie nieobecności. To pole będzie widoczne przez kierownika")
reason = models.TextField('Uzasadnienie', max_length=255, blank=False, null=False, help_text="Powód złożenia wniosku", error_messages={'blank': "Wpisz tutaj coś"})
note_optional = models.TextField('Uwagi', max_length=255, null=True, blank=True)
urlop = models.CharField('Urlop', choices=urlop_ch, default=1, max_length=50)
manager = models.CharField('Przełożony', choices=manager_ch, default=0, max_length=50)
manager_accpt = models.CharField('Akceptacja', choices=accpt_ch, null=True, blank=True, max_length=25)
worker = models.ForeignKey(Lista, on_delete=models.CASCADE, null=True, blank=True)
views.py
def manager_day_free_accpt(request):
db_all_free_days = Wniosek_urlop.objects.all().order_by('id')
#Pole wyboru y_n
form_accpt = Manager_accpt_y_n(request.POST or None)
if form_accpt.is_valid():
form_accpt.save()
messages.success(request, 'Zapisano zmiany.')
else:
messages.success(request, 'Ups. Cos poszło nie tak.')
return render(request, "manager_accpt.html", {'db_all_free_days': db_all_free_days, 'form_accpt': form_accpt})
choices.py
manager_ch = [("1", "manager 1"),
("2", "manager 2")
]
accpt_ch = [
("1", "accept"),
("2", "reject")
]
manager_accpt.html
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Pracownik</th>
<!--Skip some col-->
<th scope="col">Przełożony</th>
<th scope="col"></th>
</tr>
</thead>
<tbody>
{% for tmp in db_all_free_days %}
{%if tmp.manager_accpt == null %}
<tr>
<th scope="row">{{tmp.id}}</th>
<td>{{tmp.worker}}</td>
<td>{{tmp.manager}}</td>
<td>
<form role="form">
{% csrf_token %}
{{form_accpt|bootstrap}}
<button type="submit" class="btn btn-success">Wyślij wniosek <i class="far fa-save"></i></button>
<button type="button" class="btn btn-outline-secondary" onclick="goBack()">Cofnij</button>
</form>
</td>
</tr>
{% else %}
<div class="alert alert-dark" role="alert">
No free days to accept
</div>
{% endif %}
{% endfor %}
Экран - результат на странице: