On Aug 24, 3:36 pm, Tom Evans <[email protected]> wrote:
> On Tue, Aug 23, 2011 at 11:28 PM, ernando <[email protected]> wrote:
> > Hi all,
>
> > maybe it's newbie question but I wasn't able to find clear answer/
> > solution on it.
>
> > For example, we have the following models:
>
> > class A(models.Model):
> >    id = models.AutoField(primary_key=True)
> >    title = models.CharField(max_length=30)
>
> > class B(models.Model):
> >    id = models.AutoField(primary_key=True)
> >    title = models.CharField(max_length=30)
> >    aItems = models.OneToOneField(A)
>
> > And try to save them in the following way:
>
> > a = A(title="123")
> > b = B(title="333", aItems = a)
> > b.save()
>
> > This code runs with the error: (1364, "Field 'aItems_id' doesn't have
> > a default value")
> > if I firstly save a object - everything goes smoothly. So, the
> > question is - should we always save all related objects manually?
> > According to django docs we have to create object at first. But that's
> > now always convenient - e.g. I receive full model from the 3rd part
> > service and want to save it into DB with one call and not do it for
> > each item.
>
> > Regards,
> > Dmitry
>
> Only objects that exist in the database can be related to each other.
> If you have a function which accepts an model instance, it should make
> it clear that it is an error to pass it an object that does not exist
> in the database. You really should not be overriding save() to save
> related objects that do not exist in the database.
>
> Mostly these kind of problems go away if you start using the create
> and get_or_create helpers on the model's manager, eg I would never
> have this in my code:
>
> a = A(title="123")
> b = B(title="333", aItems = a)
> b.save()
>
> it would look like this:
>
> a, created = A.objects.get_or_create(title='123')
> b = B.objects.create(title='333', aitems=a)
>
> Cheers
>
> Tom

+1

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

Reply via email to