Python 如何使用url变量<;在基于类的视图中预填充表单;str:>;
正如问题所说,我试图用url变量预填充表单,我的意思是表单填充url中的变量。我试图使用get initial函数,但它不起作用,因此我将分享我的代码,以便您可以看到发生了什么以及我犯了什么错误 views.pyPython 如何使用url变量<;在基于类的视图中预填充表单;str:>;,python,django,forms,populate,web-frameworks,Python,Django,Forms,Populate,Web Frameworks,正如问题所说,我试图用url变量预填充表单,我的意思是表单填充url中的变量。我试图使用get initial函数,但它不起作用,因此我将分享我的代码,以便您可以看到发生了什么以及我犯了什么错误 views.py class AddPostView(CreateView): 型号=员额 form_class=PostForm 模板名称='app1/createpost.html' def get_首字母(自身,**kwargs): #返回用于此视图上窗体的初始数据。 initial=super(
class AddPostView(CreateView):
型号=员额
form_class=PostForm
模板名称='app1/createpost.html'
def get_首字母(自身,**kwargs):
#返回用于此视图上窗体的初始数据。
initial=super().get_initial()
首字母['stock']=self.kwargs.get('sym'))
返回首字母
def表单_有效(自身、表单、符号):
form.instance.author=self.request.user
返回super().form_有效(form)
models.py
类股票名称(models.Model):
name=models.CharField(最大长度=255)
symbol=models.CharField(最大长度=255)
定义(自我):
返回自我符号
班级职务(models.Model):
title=models.CharField(最大长度=255)
header_image=models.ImageField(null=True,blank=True,upload_to='images/'))
author=models.ForeignKey(用户,on_delete=models.CASCADE)
body=RichTextField(blank=True,null=True)
#body=models.TextField()
post\u date=models.DateField(auto\u now\u add=True)
category=models.CharField(最大长度=255,默认值='coding')
snippet=models.CharField(最大长度=255)
likes=models.ManyToManyField(用户,相关名称='blog\u posts')
stock=models.ForeignKey(StockNames,null=True,on_delete=models.CASCADE)
def total_likes(自我):
return self.likes.count()
定义(自我):
返回self.title+'|'+str(self.author)
def get_绝对_url(自身):
返回反向('app1:article detail',args=(self.id,))
forms.py
class PostForm(forms.ModelForm):
类元:
型号=员额
字段=('title','category','body','snippet','header\u image','stock')
小部件={
'title':forms.TextInput(attrs={'class':'form control','placeholder':'title','length':'100px'}),
#'author':forms.TextInput(attrs={'class':'form control','value':'','id':'elder','type':'hidden'}),
#“作者”:forms.Select(attrs={'class':'form control'}),
'category':forms.Select(choices=choice_list,attrs={'class':'form control','placeholder':'choices'}),
“body”:forms.Textarea(attrs={'class':'form control'}),
'snippet':forms.Textarea(attrs={'class':'form control'}),
'stock':forms.Select(choices=choice_list,attrs={'class':'form control','placeholder':'choices'})
}
url.py
应用程序名称='app1'
URL模式=[
路径('add_post/',AddPostView.as_view(),name='addpost'),
]
您可以尝试在views.py()中使用get\u form\u kwargs:
您可以覆盖get_form_kwargs
并将stock
传递给kwargs字典。然后在\uuuu init\uuuu()方法中,在表单上设置字段
views.py:
class AddPostView(CreateView):
model = Post
form_class = PostForm
template_name = 'app1/createpost.html'
stock = None
def get_form_kwargs(self):
kwargs = super(AddPostView, self).get_form_kwargs()
stock = self.kwargs.get('sym')
kwargs.update({'stock': stock})
return kwargs
forms.py:
class PostForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
stock= kwargs.pop('stock')
super(MyForm, self).__init__(*args, **kwargs)
self.fields['stock'] = stock
我如何在get_初始形式中应用它?你不必这样做。你的代码在两个地方。Crytal clear示例:嘿,伙计,我试过了,它说uuu init_uuuuuuuu()得到了一个意外的关键字参数“stock”Let us。