Według doktorów self.object istnieje dla UpdateView

Szablon:

{% block content %}

<p>
    {{ form.object.some_foreign_key }}
</p>

<form method="post">
    {{ form.as_p }}
    <input type="submit" value="Update">
</form>

{% endblock %}

Ale form.object nie istnieje:

Nie powiodło się: niezdefiniowana zmienna szablonowa "Form.Object" w "/foo/bar_form.html"

Dlaczego form.object nie istnieje w szablonie?

1
guettli 15 marzec 2021, 01:14

2 odpowiedzi

Najlepsza odpowiedź

Wydaje się, że jesteś mylący UpdateView atrybut klasy object z iniekcyjnym kontekstem szablonu form instancja

Instancja formularza jest ustawiana w ten sam sposób, w jaki sposób byłby ustawiony, jeśli wykonałeś widok oparty na funkcji i self.object jest ustawiony jako form.instance

Z ModelFormMixin

def get_form_kwargs(self):
    """Return the keyword arguments for instantiating the form."""
    kwargs = super().get_form_kwargs()
    if hasattr(self, 'object'):
        kwargs.update({'instance': self.object})
    return kwargs

Ponadto możesz sprawdzić metodę Get () w ProcessFormView i przejdź przez implementacje get_context_data w FormMixin

1
iklinac 15 marzec 2021, 02:26

W tym przypadku chcesz uzyskać dostęp do klasy {x0}} z klasy Python, jeśli chcesz uzyskać dostęp do określonego pola z szablonu, wystarczy użyć form.some_foreign_key.

Jeśli chcesz uzyskać dostęp do samej instancji, możesz użyć form.instance.

1
Francisco C 14 marzec 2021, 23:30