Кратко:
В форме есть поле , задача выводить «value» из поля «application_status» с типом «ForeignKey» в зависимости от авторизованного пользователя.
Подробно:
Для работы с формами использую, «UpdateView», поле «application_status» имеет тип «ForeignKey» выводит неизменяемый список статусов (‘редактирование’, ‘согласование’, ‘доработка’, ‘утверждено’) требуется скрыть статус:
- (‘редактирование’, ‘согласование’) только для «supervisor»
- (‘доработка’, ‘утверждено’) для всех остальных пользователей
Разобрался не без помощи
Dr. Bacon с выборкой нужный «value» через фильтрацию в forms.py в __init__, но не могу туда пользователя перекинуть или сделать все во views.py, тут понятно как получить пользователя.
Пользователи не будут меняться.
#model.py
class Echk(models.Model):
date_craet_application = models.DateTimeField(auto_now=True, verbose_name='Создано') #Дата создания карточки
subdivision = models.ForeignKey('subdivision', on_delete=models.PROTECT, null=True, verbose_name='Цех')#Свзь с таблицей цехов
work_date = models.DateTimeField(verbose_name='Дата работы')
application_status = models.ForeignKey('application_status', default=1, on_delete=models.PROTECT, verbose_name='Стутус заявки') #Статус заявки
note = models.TextField(blank=True, verbose_name='Примечание') #примечание
def get_absolute_url(self):
return reverse("add_application", kwargs={'pk': self.pk})
def __str__(self):
return str(self.pk)
class Meta:
verbose_name = 'Заявка'
verbose_name_plural = 'Заявки'
ordering = ['-id']
class ApplicationStatus(models.Model):
application_status = models.CharField(max_length=150, db_index=True, verbose_name='Статус заявки') #Статус заявки
class Meta:
verbose_name = 'Статус заявки'
verbose_name_plural = 'Статусы заявок'
ordering = ['id']
def __str__(self):
return self.application_status
#views.py
class UpdateApplication(UpdateView):
model = Echk
form_class = AddAapplicationForm
template_name = 'echk/update_application.html'
success_url = reverse_lazy('echk')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['idApplication'] = self.kwargs['pk']
return context
#form.py
class AddAapplicationForm(forms.ModelForm):
work_date = forms.DateField(widget=SelectDateWidget(), initial=yesterday)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['application_status'].queryset = ApplicationStatus.objects.filter(application_status__in = ('Черновик', 'Согласование'))
class Meta:
model = Echk
fields = ['subdivision', 'work_date', 'application_status', 'note']
widgets = {
}
update_application.html{% extends 'base.html' %}
{% block container %}
<h1>Изменить заявку</h1>
<form action ="" method = "post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.non_field.errors }}
<div class="form-group">
<label for="{{ form.application_status.id_for_label}} " > статус заявки </label>
{{form.application_status}}
<div class="invalid-feetback">
{{ form.application_status.errors}}
</div>
</div>
<button type= "sumbit" class = "btn btn-primary">Сохранить заявку </button>
</form>
{% endblock %}