I have created :
- A model
- A corresponding model form
- Corresponding view which creates a model formset using the form in 2.
Below are the codes :
1.Model :
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.corresponding model form :
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.corresponding view
I call the corresponding form as in point 2 in the view as :
ExpFormSet = modelformset_factory(Expenditure,extra=10,max_num=10,
fields=('exp_date', 'description','exp_type','amount','exp_pocket'),
can_delete=False,form=ExpenditureForm))
and it works great .
Problem I want to pass the logged in user to my form i.e. i want to pass request.user from my views.py to the form and to do that i did changes in the form by adding the init method ( currently commented in above code) , however i am not sure how to pass the logged in user from the views.py to this form .
What i tried ? Solution mentioned in this question
However this dosent seems to work for model fromset .
tried calling below code in formset , i know its wrong but just a trial !
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)))
Doing this i do get output of print statement from init of form as User who requested this form is admin
However i get 'RequestUser' Exception Type: KeyError Exception Value:
Any Advice ?