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.
--
Ticket URL: <https://code.djangoproject.com/ticket/22450>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* status: new => closed
* needs_better_patch: => 0
* resolution: => invalid
* needs_tests: => 0
* needs_docs: => 0
Comment:
You actually made an error when overriding `Model.save()`, you're not
correctly passing over `args` and `kwargs`.
{{{#!python
def save(self, *args, **kwargs):
if not self.pk:
self.created = timezone.now()
super(Company, self).save(*args, **kwargs)
}}}
Notice the `*` before `args` and the double one before `kwargs`.
See TicketClosingReasons/UseSupportChannels.
--
Ticket URL: <https://code.djangoproject.com/ticket/22450#comment:1>