【发布时间】:2014-09-17 05:51:09
【问题描述】:
我已经创建了:
- 一个模型
- 对应的模型表单
- 使用2中的表单创建模型formset的对应视图。
以下是代码:
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=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 从我的 views.py 传递给表单,为此我通过添加 init 方法对表单进行了更改(目前在上面的代码中评论),但是我不知道如何将登录用户从views.py传递到这个表单。
我试过什么? 这个question中提到的解决方案
但是,这种剂量似乎适用于模型 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)))
这样做我确实从表单的 init 中得到打印语句的输出 请求此表单的用户是管理员
但是我得到'RequestUser' 异常类型:KeyError 异常值:
有什么建议吗?
【问题讨论】:
-
你应该在 view.py 方法的顶部使用注解
@login_required
标签: django forms django-forms