ohh, thanks, Daniel! I like your way. and i don't even my to expose the
user_id in a form.I'll try that.

On Mon, Jun 15, 2009 at 10:55 PM, Daniel Roseman <dan...@roseman.org.uk>wrote:

>
> On Jun 16, 1:12 am, k-dj <kah...@gmail.com> wrote:
> > I'm just starting to use django and have run into a problem I have not
> > been able to solve.
> >
> > I have a model Item which stores, among other things, user_id.
> > Then I have a ModelForm. I want user_id to be a hidden field. After
> > searching around the web, I found out how to create a hidden field.
> > The template is rendered as I like it.
> > user_id is a hidden field with a value of 1. The problem is when I
> > submit the form, I get IntegrityError. "Column 'user_id' cannot be
> > null".
> >
> > but from the debug message I get back I can see that POST has all 3
> > things I need. So maybe when a new form is created there is problem.
> >
> > views.py
> > @login_required
> > def newItem(request):
> >         if not request.POST:
> >                 form = ItemForm()
> >                 return
> render_to_response('manager/newItem.html',{'form':form})
> >         newForm = ItemForm(request.POST)
> >         if newForm.is_valid():
> >                 newForm.save() #problem here?
> >                 return HttpResponsePermanentRedirect('.')
> >
> > models.py
> > class Item(models.Model):
> >         user = models.ForeignKey(User)
> >         name = models.CharField(max_length=32)
> >         description = models.CharField(max_length=128)
> >         creation_date = models.DateField(auto_now=True)
> >
> > forms.py
> > class ItemForm(ModelForm):
> >     user_id_wid = forms.HiddenInput(attrs={'value': 1})
> >     user_id = forms.IntegerField(widget=user_id_wid,required=False)
> >     class Meta:
> >         model = Item
> >         fields = ['name', 'description']
>
>
> You can't set 'value' as an argument to attrs.
>
> If you want to preset the value of a field, pass in an 'initial'
> dictionary on form instatiation:
> form = MyForm(initial={'user_id':1})
>
> However a much better way is not to have the user_id field in the form
> at all, and set the correct value on the object on save.
>
> class itemForm(ModelForm):
>    ....
>    class Meta:
>         model = Item
>         exclude = ('user',)
>
> and in the view:
>    if newForm.is_valid():
>        item = newForm.save(commit=False)
>        item.user_id = 1
>        item.save()
>
> --
> DR.
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to