@wingserg

Почему diango выполняет insert вместо update в форме?

Здравствуйте.
Вьюха создает запись и тут же можно ее отредактировать через форму.
Но после кнопки формы создается новая запись вместо update:

def oper_next(request, oper_id_op, template_name="stage/otk_new.html"):  
    Op1 = Oper.objects.get(id_op = oper_id_op)  #Ok! получить объект..
    otk = Otk.objects.create( id_op = Op1,   techn_oper=Op1.techn_oper, 
          prod=Op1.prod, sostav=Op1.sostav, ispoln=Op1.ispoln, smena=Op1.smena, kolwo = Op1.kolwo,)
    if request.method == 'POST':
        f = EditOtkForm(request.POST, instance=otk) 
        if f.is_valid():
            f.save()
            return HttpResponseRedirect(reverse('oper')) 
    else:
        f = EditOtkForm(instance=otk) #

    ctx = {'otk': otk,'form': f, 'oper': Op1}
    return render(request, template_name, ctx)


уже в форме явно указал:
class EditOperForm(OperForm):

    def save(self):
        oper = self.instance
        oper.save( force_insert=False, force_update = True ) # не добавлять, замещать
        return oper


шаблон:
{% extends "base_generic.html" %}

{% block content %}
  <a href="{% url 'stage_index' %}"> --- на Главную --- </a>

  <h3> НОВАЯ Запись в Журнал  </h3>  
  
  <p><strong>Запись провел:</strong> {{ otk.posted_by }} {{ otk.created_on }}</p>  
  <p><strong>(от техн.зад.)</strong> {{ oper.id_op }}</p> 

  <p><strong>Продукт:</strong> {{ otk.prod }}</p> <!--  -->
  <p><strong>Статус записи:</strong> {{ otk.status }}</p> 

======= <strong> отредактируйте необходимые поля внизу </strong> =============
    <h3> Редактирование записи:</h3> 
    <form method="POST" class="post-form">{% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="save btn btn-default">Сохранить изменения</button>
    </form>
{% endblock %}


Все равно добавляет.
И что самое приятное - подобное в этом же проекте работает, а это - нет
Никто не сталкивался с подобным?
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
@wingserg Автор вопроса
Otk.objects.create как раз создает запись, к-рую потом в форме редактирую
и по логике в форме должен быть update на существующей записи
Ан, нет! Что только не пробовал :(

Вместо create() здесь нужен get_or_create()!!!
только после него объект надо вытащить из котрежа, где он будет 1м элементом
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
tumbler
@tumbler Куратор тега Django
бекенд-разработчик на python
У Вас Otk.objects.create двумя строками выше вызова form.save. Может дело в нем?
Ответ написан
Комментировать
@MAGistr_MTM
Учусь программировать
Посмотрите на генерики и переходите на CBV.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы