#python #django #memory #copy
#python #джанго #память #Копировать
Вопрос:
Я работал над представлением Django , которое обновляет определенный объект модели x
. В методе POST я инициирую ModelForm
и передаю instance
объект модели x
. Но когда я пытаюсь использовать x
объект внутри if form.is_valid():
блока, некоторые значения в vars(x)
go None
. Вот фрагмент текста, объясняющий сценарий.
class MyUpdateView(generic.View):
form_class = MyModelForm
def post(self, request, *args, **kwargs):
model_obj = MyModel.objects.get(id=kwargs.get("pk"))
# Example: {"emp": 113, "project": 22, "salary": 28000}
form = self.form_class(request.POST, instance=model_obj)
print(vars(model_obj)) # works fine, shows all the data
if form.is_valid():
print(vars(model_obj)) # few values go None, not reusable
# Example: {"emp": None, "project": None, "salary": 28000}
Как мы можем видеть, когда переменные проверяются внутри form.is_valid()
, что-то происходит с переданным instance
объектом.
Какая может быть причина этого?
Комментарии:
1. Кажется маловероятным, что это весь ваш код, поскольку вы не передаете объект, вы получаете экземпляр непосредственно из базы данных на основе переданного вами pk. Это не меняется при вызове
form.is_valid()
. Хорошая попытка получить минимально воспроизводимый пример, но я думаю, что вы вырезали бит, вызывающий проблему 🙂2. Подождите, вы знаете, что — я лгу вам! На самом деле это было для меня новым 🙂 code.djangoproject.com/ticket/14885 — судя по всему, такое поведение вполне ожидаемо.