﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
22450	Error when model.save(force_insert=True)	vcajes@…	nobody	"I'm having an error when I add the force_insert=True parameter to a model.save call. The problem is arising in a Django Unit TestCase (from django.test import TestCase)

The model example:

{{{
class Company(models.Model):
	owner = models.ForeignKey(User)
	name = models.CharField(max_length=75)
	description = models.CharField(max_length=250)
	created = models.DateTimeField()
	status = models.CharField(max_length=1, choices=COMPANY_STATUS_CHOICES, default='a')
	
	def save(self, *args, **kwargs):
		if not self.pk:
			self.created = timezone.now()
		super(Company, self).save(args, kwargs)
}}}

The code error example:

{{{
self.company = Company(owner=self.operator, name=""Company1"", description=""Descripcion Company1"", status='a')
self.company.save(force_insert=True)
}}}

And the error say it cannot force an '''UPDATE''' (I think there are some parameters that are passed in a wrong order somewhere)


{{{
Error
Traceback (most recent call last):
  File ""C:\Users\KGs\Documents\Coupoints\wsgi\openshift\points\tests.py"", line 36, in setUp
    self.company.save(force_insert=True)
  File ""C:\Users\KGs\Documents\Coupoints\wsgi\openshift\business\models.py"", line 49, in save
    super(Company, self).save(args, kwargs)
  File ""C:\VirtualEnvs\CoupointsEnv\lib\site-packages\django\db\models\base.py"", line 545, in save
    force_update=force_update, update_fields=update_fields)
  File ""C:\VirtualEnvs\CoupointsEnv\lib\site-packages\django\db\models\base.py"", line 573, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File ""C:\VirtualEnvs\CoupointsEnv\lib\site-packages\django\db\models\base.py"", line 626, in _save_table
    raise ValueError(""Cannot force an update in save() with no primary key."")
ValueError: Cannot force an update in save() with no primary key.
}}}

The problem is in here:

In the file django.db.models.base.py in the function:

{{{
def _save_table(self, raw=False, cls=None, force_insert=False, force_update=False, using=None, update_fields=None):
}}}

If you print the parameters force_insert, force_update, update_fields just before the:

{{{
 if not pk_set and (force_update or update_fields):
            raise ValueError(""Cannot force an update in save() with no primary key."")
}}}

You will see that force_insert is None and force_update has the value {'force_insert': True}, and thats the problem.

Its an easy to solve problem. Y just wanted to report. Thanks."	Uncategorized	closed	Database layer (models, ORM)	1.6	Normal	invalid	model save force_insert		Unreviewed	0	0	0	0	0	0
