It depends on what you want. You can set 'created_by' to blank=True and null=False, so it doesn't have to be filled but it is still mandatory in the database. Or, if you never want to set it in the form, you can make it 'editable=False' and it doesn't show up in the form, but it can still be NOT NULL. Of course, you must make sure it is filled in some way.
- Paulo On Sat, Mar 27, 2010 at 4:20 PM, tc <thierry.ch...@gmail.com> wrote: > > > On 21 mar, 22:38, Bjunix <bju...@bjunix.de> wrote: > > You probably want to change the attributes of the model object > > directly. > > > > "If you call save() with commit=False, then it will return an object > > that hasn't yet been saved to the database." > > Source: > http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-sav... > > > > So I would do something like this: > > > > def my_change_view(request, id): > > #get instance based on id here > > #.... > > if request.method == 'POST': > > form = MyModelForm(request.POST, instance=instance) > > if form.is_valid(): > > obj = form.save(commit=False) > > obj.created_by = request.user > > obj.save() > > form.save_m2m() > > return redirect('/somewhere') > > else: > > form = MyModelForm(instance=instance) > > return render_to_response..... > > > > I hope this helps. Remember to call form.save_m2m() if your model has > > any many-to-many relations. I also would suggest to (re-)read django's > > excellent documentation forms. > > > > I see that the problem I have had today is exactly the same. The only > problem of the solution you are > proposing here is that created_by could not be mandatory. If it is, > the form would be not valid. > > > > On Mar 21, 10:00 pm, Cesar Devera <cesardev...@gmail.com> wrote: > > > > > hi. > > > > > I have a ModelForm based on an Model like this: > > > > > class MyModel(models.Model): > > > attr1 = models.CharField() > > > attr2 = models.CharField() > > > attr3 = models.CharField() > > > createdby = models.ForeignKey(User, related_name='createdby', > > > db_column='createdbyid') > > > calculatedfield = models.CharField() > > > > > class MyModelForm(ModelForm): > > > class Meta: > > > model = MyModel > > > > > the attribute fields attr1, attr2 and attr3 are properly shown on my > > > html page, and correctly restored on my server-side view like this: > > > > > def save(request,id): > > > user = request.user > > > try: > > > mymodel = MyModel.objects.get(pk=id) > > > except: > > > mymodel = MyModel() > > > form = MyModelForm(request.POST, instance=mymodel) > > > > > now comes the problem: I want to set the createdby attribute only on > > > my view, AFTER the html page Post. I want to set the createdby and any > > > other calculated field on server side. is it possible? > > > > > I tried: > > > > > form['createdby'] = request.user > > > > > but it didn't seem to work. > > > > > this field (createdby) is NOT NULL and so I wouldn't like to set it to > > > NULL, save the form with form.save() and later recover the entity > > > again and manipulate the remaining fields... > > > > > any ideas? > > > > > thanks in advance. > > > > > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To post to this group, send email to django-us...@googlegroups.com. > To unsubscribe from this group, send email to > django-users+unsubscr...@googlegroups.com<django-users%2bunsubscr...@googlegroups.com> > . > For more options, visit this group at > http://groups.google.com/group/django-users?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-us...@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.