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