Скрытые данные в форме, но PrimaryKey или ForeignKey - PullRequest
0 голосов
/ 18 октября 2011

У меня есть вид, который редактирует экземпляр модели Foo.Он вызывается с одним аргументом (сообщение формы) или тремя аргументами (начальный запрос на редактирование объекта):

def edit_it(request, key1_id=-1, key2_id=-1):

, где key1_id и key2_id идентифицируют конкретный экземпляр для редактирования.При входе я проверяю, был ли мне вызван пост из формы или по ссылке

if request.method == 'POST':
    key1_id = request.key1_id    # first thing that doesn't work
    key2_id = request.key2_id    # (also doesn't work)
    foo = Foo.objects.get(key1=key1_id, key2=key2_id)
    form = Foo(request.POST, instance=foo)
    ...
else:
    foo = Foo.objects.get(key1=key1_id, key2=key2_id)
    form = Foo(instance=foo)

. В своем шаблоне я явно вставляю <input type="hidden" ... > для key1_id и key2_id.Так что кажется разумным, что key1_id и key2_id должны быть где-то в request.POST, но я не нашел, чтобы он копался в коде, документах и ​​Google.Я попытался указать ключевые поля [12] _id в модели с помощью "widget=forms.HiddenInput", но виджет здесь не работает: key1_id - это первичный ключ, а key2_id - это ForeignKey, работа которого заключается в том, чтобы просто не ловить объекты других людей.изменив в URL-адресе key1_id.

Получившийся HTML-код (теперь слегка измененный благодаря предложению сохранить аргументы к сообщению) выглядит так:

<table> 
  <form action="/seededit/u=2/sh=14" method="post">
   <div style='display:none'>
   <input type='hidden' name='csrfmiddlewaretoken'
    value='19a559c496e637cdbf3132ce8e147cc4' /></div> 

[...]

<tr> 
  <td><input type="hidden" name="user_id" value="2" /> 
      <input type="hidden" name="shareable_id" value="14" /></td> 
  <td><input type="submit" value="Submit" name="submit" /></td> 
</tr> 
</form> 
</table> 
</p>

1 Ответ

0 голосов
/ 19 октября 2011

Это не request.key2_id Это request.POST['key2_id] `request.POST - это QueryDict, который действует как словарь, так что print request.POST покажет вам словарь.

При этом, вы все равно можетеиспользуйте / определяйте эти поля как HiddenInput, а затем используйте проверку формы django, чтобы убедиться, что они правильного типа / существуют и т. д. Существует множество вариантов, когда дело доходит до обработки форм, переменных запроса и проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...