Python 如何在Django中添加默认(隐藏)值以形成模板?
给定Django.db模型类:Python 如何在Django中添加默认(隐藏)值以形成模板?,python,django,django-templates,django-urls,Python,Django,Django Templates,Django Urls,给定Django.db模型类: class P(models.Model): type = models.ForeignKey(Type) # Type is another models.Model class name = models.CharField() 如果希望创建具有指定类型的新p,即如何使“type”成为默认的隐藏字段(来自用户),其中类型如下: http://x.y/P/new?type=3 因此,在表单中不会出现“type”字段,但在保存p时,其类型将具有i
class P(models.Model):
type = models.ForeignKey(Type) # Type is another models.Model class
name = models.CharField()
如果希望创建具有指定类型的新p,即如何使“type”成为默认的隐藏字段(来自用户),其中类型如下:
http://x.y/P/new?type=3
因此,在表单中不会出现“type”字段,但在保存p时,其类型将具有id 3(即type.objects.get(pk=3))
第二,当使用一般的Django视图时,如何通过url.py在url中指定“默认”类型(可能(&I)),即
urlpatterns = ('django.generic.views.create_update',
url(r'^/new$', 'create_object', { 'model': P }, name='new_P'),
)
我发现这很难描述,这可能是问题的一部分非常感谢您的投入 要在模型中具有默认外键:
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.
#URLconf
urlpatterns=模式(“”,
(r“^blog/$”、“blog.views.page”),
(r“^blog/page(?P\d+/$”,“blog.views.page”),
)
#视图(在blog/views.py中)
def页面(请求,num=“1”):
#根据num输出相应页面的博客条目。
在上面的示例中,两个URL模式都指向同一个视图——blog.views.page——但第一个模式没有捕获URL中的任何内容。如果第一个模式匹配,page()函数将使用num的默认参数“1”。如果第二个模式匹配,page()将使用正则表达式捕获的任何num值
窗口小部件
django.forms.widgets.HiddenInput
将使您的字段隐藏
在大多数情况下,我认为您会发现任何隐藏的表单值也可以指定为url参数。换言之:
<form action="new/{{your_hidden_value}}" method="post">
....
</form>
....
在URL.py中:
^/new/(?P<hidden_value>\w+)/
^/new/(?P\w+)/
我自己更喜欢这种技术,因为只有在我需要跟踪模型实例的主键时,我才真正发现自己需要隐藏的表单字段——在这种情况下,“edit/pkey”url用于启动编辑/返回表单,保存时收到帖子。如果您使用Andrew在url中包含隐藏值的方法,并且仍然希望使用Django的内置表单模板,那么有一些方法可以排除隐藏字段