Механизм реализации формы

У меня проблема с созданием формы 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?

У кого-нибудь есть подсказка, чтобы определить проблему?

0 ответов

Другие вопросы по тегам