Как добавить значения по умолчанию (скрытые) в шаблоны форм в Django?

Учитывая класс моделей Django.db:

class P(models.Model):
   type = models.ForeignKey(Type) # Type is another models.Model class
   name = models.CharField()

где нужно создать новый P с указанным типом, то есть как сделать "тип" скрытым полем по умолчанию (от пользователя), где тип задается так:

http://x.y/P/new?type=3 

Таким образом, в форме не будет отображаться поле «тип», но при сохранении P его тип будет иметь идентификатор 3 (т.е. Type.objects.get (pk = 3)).

Во-вторых, как (и возможно ли это) указать тип "по умолчанию" в URL-адресе через urls.py при использовании общих представлений Django, а именно.

urlpatterns = ('django.generic.views.create_update',
  url(r'^/new$', 'create_object', { 'model': P }, name='new_P'),
)

Я обнаружил, что это ужасно сложно описать, что может быть частью проблемы. :) Вход очень ценится!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
7
0
9 677
3

Ответы 3

Чтобы иметь в модели внешний ключ по умолчанию:

mydefault = Type.objects.get(pk=3)

class P(models.Model):
   type = models.ForeignKey(Type, default=mydefault) # Type is another models.Model class
   name = models.CharField()

Обратите внимание, что использование pk=x довольно некрасиво, так как в идеале вам не нужно заботиться о том, чему равен первичный ключ. Попробуйте добраться до нужного вам объекта по другому признаку.

Здесь, как вы устанавливаете значения по умолчанию в свои URL-адреса:

# URLconf
urlpatterns = patterns('',
    (r'^blog/$', 'blog.views.page'),
    (r'^blog/page(?P<num>\d+)/$', 'blog.views.page'),
)

# View (in blog/views.py)
def page(request, num = "1"):
    # Output the appropriate page of blog entries, according to num.

In the above example, both URL patterns point to the same view -- blog.views.page -- but the first pattern doesn't capture anything from the URL. If the first pattern matches, the page() function will use its default argument for num, "1". If the second pattern matches, page() will use whatever num value was captured by the regex.

Виджет django.forms.widgets.HiddenInput отобразит ваше поле как скрытое.

В большинстве случаев, я думаю, вы обнаружите, что любое значение скрытой формы также может быть указано в качестве параметра URL-адреса. Другими словами:

<form action = "new/{{your_hidden_value}}" method = "post">
....
</form>

и в urls.py:

^/new/(?P<hidden_value>\w+)/

Я предпочитаю этот метод, потому что мне действительно нужны скрытые поля формы только тогда, когда мне нужно отслеживать первичный ключ экземпляра модели - и в этом случае URL-адрес "edit / pkey" служит целям как инициирования редактирования / возврата формы и получение POST при сохранении.

Если вы согласны с подходом Эндрю, включающим скрытое значение в URL-адрес, и по-прежнему хотите использовать один из встроенных в Django шаблонов форм, у вас есть способы исключить скрытое поле.

http://docs.djangoproject.com/en/1.1/topics/forms/modelforms/#using-a-subset-of-fields-on-the-form

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