Я недавно сделал нечто похожее на это, и мое решение состояло в том, чтобы динамически разделить форму на подклассы, предоставляя только необходимое поле и отображая только это поле:
from forms import SomeModelForm
from models import SomeModel
def view_name(request,pk,field):
SomeModelFieldForm(SomeModelForm):
class Meta(SomeModelForm.Meta):
fields = (field,)
inst = SomeModel.objects.get(pk=pk)
form = SomeModelFieldForm(instance=inst)
#the rest of your view goes here...
#...send only the form's field:
ctx = {'field': form[field]}
return render_to_response("template",ctx)
Это использует преимущества особенностей вашей исходной формы- т.е. если у вас есть специально определенные виджеты, или другие ограничения, или что-то.Затем он ограничивает всю форму одним полем.Это необходимо для проверки одного поля в существующей модели.
Однако вы не хотите отправлять всю форму, вы хотите отправить только одно поле.form[field]
- это django.forms.forms.BoundField
, представляющее конкретное поле, которое вы передаете.
Например, если вы работали с моделью User
из django.contrib.auth.models
и создали форму для указанного пользователяв режиме ожидания вызов form["username"]
вернет:
<django.forms.forms.BoundField object at 0x01354750>
, а вызов print form["username"]
выведет:
<input id="id_username" type="text" name="username" value="name_of_user" maxlength="30" />