Механизм реализации формы
У меня проблема с созданием формы Django. Подводя итог, вот мой код. В представлении я должен создать контекст, который связан со многими объектами.
def my_view(request):
myObjects = ObjectFromModels.objects.filter(some_attribute = '1234')
for item in myObjects:
form_related = AssociatedForm(item_pk = item.pk)
my_context[item] = form_related
class AssociatedForm(forms.Form):
# attributes
def __init__(self,item_pk,*args,**kwargs)
super(AssociatedForm,*args,**kwargs)
if item_pk :
obj = ObjectFromModels.objects.get(pk=item_pk)
self.someAttribute = obj.calling_function() # It returns a list
Вот проблема, в представлении, после итерации, для всех элементов, значение my_context[item.name]
переопределяется значением последнего элемента итерации
Для отладки я напечатал результаты:
def my_view(request):
myObjects = ObjectFromModels.objects.filter(some_attribute = '1234')
for item in myObjects:
form_related = AssociatedForm(item_pk = item.pk)
print(form_related.someAttribute)
my_context[item.name] = form_related
for key,val in my_context:
print(key)
print(val.someAttribute)
Давайте возьмем пример. Функция фильтра возвращает 3 объекта: [ObjectA,ObjectB,ObjectC]
и зовет calling_function()
из этих объектов возвращается:
- для элемента A: ['aze','zer','ert']
- для элемента B: ['qsd','sdf','dfg']
- для элемента C: ['wxc','xcv','vbn']
Логично, что после всех итераций, я хотел бы, чтобы это было в моем контексте. Дело в том, что он возвращает:
{<ObjectA>:['wxc','xcv','vbn'],
<ObjectB>:['wxc','xcv','vbn'],
<ObjectC>:['wxc','xcv','vbn']}
Сначала я подумал, что это проблема ссылок, но обе формы в моем контексте имеют разные адреса памяти. Я тоже пробовал deep_copy
но ничего не изменилось.
Я подозреваю, что то, что я рассматриваю как 3 разные формы, является одной формой, но я не могу объяснить почему, потому что, как я уже сказал, обе имеют разные адреса памяти. И почему в цикле правильное отображение атрибутов моей формы, но за пределами цикла, что-то не так и парсит последний dict обоим записям моего контекстного dict?
У кого-нибудь есть подсказка, чтобы определить проблему?