Django. Запись формы с привязкой экземпляра модели

При записи формы с привязанным экземпляром модели instance происходит обнуление значений полей сущности, которые не были в составе формы и, соответственно, не пришли в POST-запросе, но присутствовали в instance на момент инициализации.

Вводить данные в форму могут пользователи: Операторы - поля name, number, ОТК - поле allow и Менеджеры - все поля формы модели. Как видим, для Оператора и ОТК в форме присутствует только часть полей (наличие полей ограничено средствами html-шаблона). Но, когда Оператор или ОТК редактируют форму с экземпляром модели instance со всеми инициализированными данными, значения остальных полей - allow, date иtime, кроме файлового поля ticket обнуляются при записи формы, хотя присутствуют в instance.

В связи этим вопросы:

  1. Нормально ли такое поведение формы с instance стирать содержимое полей, не участвующих в POST?
  2. Как в данном случае обойти проблему потери информации и обеспечить возможность частичного и полного редактирования формы с сохранением остальных данных.
  3. Возможно, существуют общепринятые подходы к решению такой стандартной ситуации, подскажите, плиз..?

Модель:

class Entry(models.Model):
    # поля Оператора 
    name = models.CharField(max_length=20, blank=True)
    number = odels.CharField(max_length=10, blank=True)
    # поле ОТК
    allow = models.NullBooleanField(default=None, choices=((None, 'Нет'), (True, 'Да'), (False, 'Отказ')))
    # поля Менеджера + все вышеуказанные
    date = models.DateField(blank=True, null=True) 
    time = models.TimeField(blank=True, null=True)
    ticket = models.FileField(blank=True, null=True, upload_to='tickets/')

Форма:

class Form(forms.ModelForm):
    class Meta: 
        model = Entry
        fields = ['name', 'number', 'allow', 'date', 'time', 'ticket']

View:

def edit_form(request, pk=None):
    staff = request.user.staff
    entry = Entry.objects.filter(id=pk).first()
    entryForm = Form(request.POST or None, request.FILES or None, instance = entry)

    if request.method == "POST" and entryForm.is_valid():
        entryForm.save()
        redirect(search_entry(request))
    else:
        render(request, 'template.html', {'entryForm': entryForm, 'staff': staff})

HTML-шаблон:

<div class="form-control">
    {%for field in entryForm %}
        {%if staff.is_operator and forloop.counter < 3 or staff.is_otk and forloop.counter == 3 or staff.is_manager%}
            <label>{{field.label_tag}}</label>
            <p>{{field}}</p>
        {%endif%}
    {%endfor%}
</div>

Ответы (0 шт):