Django 将表单参数传递给模型表单集
我创造了:Django 将表单参数传递给模型表单集,django,forms,django-forms,Django,Forms,Django Forms,我创造了: 模型 相应的模型形式 相应的视图,使用2中的表单创建模型表单集 代码如下: 1.型号: class Expenditure(models.Model): exp_owner= models.CharField(default='None',max_length=50) exp_date = models.DateTimeField("Expenditure_Date") description = models.CharField(max_length=100
class Expenditure(models.Model):
exp_owner= models.CharField(default='None',max_length=50)
exp_date = models.DateTimeField("Expenditure_Date")
description = models.CharField(max_length=1000)
amount = models.FloatField(default=0)
currency = models.CharField(max_length=15,default="MYR",editable=True)
exp_pocket = models.ForeignKey(Pockets, null=True, blank=True)
exp_type = models.ForeignKey(Types_of_Expenditures)
class Meta:
unique_together = ('exp_date', 'description',)
def __unicode__(self):
return self.description
2.相应的模型形式:
class ExpenditureForm(forms.ModelForm):
#def __init__(self,*args, **kwargs):
#self.requestUser = kwargs.pop("RequestUser")
#super(ExpenditureForm, self).__init__(*args, **kwargs)
#print "User who requested this form is ",self.requestUser
def initialExpType(self):
lengthOfTypesOfExpenditures=len(Types_of_Expenditures.objects.filter(Expenditure_owner=self.requestUser))
print "current types of expenditures are ",lengthOfTypesOfExpenditures
if lengthOfTypesOfExpenditures > 0:
return Types_of_Expenditures.objects.filter(Expenditure_owner=self.requestUser)[:1].get()
else:
return "Null"
exp_date = forms.DateTimeField(widget=AdminDateWidget(attrs={'class':'datetimeField'}))
description = forms.CharField(show_hidden_initial=True,max_length=1000)
exp_type = forms.ModelChoiceField(queryset=Types_of_Expenditures.objects.filter(Expenditure_Type_Enable=True),initial=initialExpType)
amount = forms.FloatField(initial=0)
exp_pocket = forms.ModelChoiceField(show_hidden_initial=True,queryset=Pockets.objects.all(),initial=Pockets.objects.filter()[:1].get())
class Meta:
model = Expenditure
3.对应视图
我将视图中第2点中的对应形式称为:
ExpFormSet = modelformset_factory(Expenditure,extra=10,max_num=10,
fields=('exp_date', 'description','exp_type','amount','exp_pocket'),
can_delete=False,form=ExpenditureForm))
而且效果很好
问题
我想将登录用户传递到我的表单,即,我想将request.user从my views.py传递到表单,为此,我通过添加init方法(目前在上述代码中注释)在表单中进行了更改,但我不确定如何将登录用户从views.py传递到该表单
我试过什么?
本文中提到的解决方案
然而,该剂量似乎适用于fromset模型
ExpFormSet = modelformset_factory(Expenditure,extra=10,max_num=10,
fields=('exp_date', 'description','exp_type','amount','exp_pocket'),
can_delete=False,form=ExpenditureForm(RequestUser=str(request.user)))
有什么建议吗?在
ModelForm
中,您只需使用
ExpFormSet = modelformset_factory(Expenditure,extra=10,max_num=10,
fields=('exp_date', 'description','exp_type','amount','exp_pocket'),
can_delete=False,form=ExpenditureForm(request=request))
您可以使用支出改革
中的请求作为用户登录表单
class ExpenditureForm(forms.ModelForm):
def __init__(self,*args, **kwargs):
print "User who requested this form is ",kwargs['request'].user
super(ExpenditureForm, self).__init__(*args, **kwargs)
您应该在视图中的方法顶部使用注释
@login\u required
。pyi不明白您的意思?其次,我还不想传递request.POST..您可以在模型表单中传递请求以获取登录用户,而不是传递字符串。您可以从表单中删除request.POST。@parthbattra我已经做了编辑。现在,您可以在formHey中看到获取登录用户的代码!这与我在问题中所解释的完全相同,我也在传递一个参数,而你在传递整个请求,我仍然会得到相同的错误。uu init_uu()得到了一个意外的关键字参数'request',与我在第2点中所解释的相同,你的回答结果相同,我得到与上面相同的打印输出,并且得到相同的错误