@koshnv
Жить, искать, найти, и перепрятать...

Как скрыть «value» поля поля «ForeignKey» по условию «авторизованный пользователь»?

Кратко:
В форме есть поле , задача выводить «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 %}

  • Вопрос задан
  • 47 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы