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

-- 
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