Opened 14 years ago

Last modified 14 years ago

#15082 closed

delete() does not function consistently with CharField PKs — at Version 1

Reported by: w004dal Owned by: nobody
Component: Core (Other) Version: 1.2
Severity: Keywords: model, db
Cc: w004dal@… Triage Stage: Unreviewed
Has patch: no Needs documentation: yes
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Russell Keith-Magee)

I'm working with MyISAM tables with MySQL and have the following behavior with delete() on Django 1.2.3-1 on Fedora Core 12.

class DoesWork(models.Model):
    mac_id = models.CharField(max_length=17)
    ip = models.CharField('Host/IP Address', max_length=255)

class DoesNotWork(models.Model):
    mac_id = models.CharField(max_length=17, primary_key=True)
    ip = models.CharField('Host/IP Address', max_length=255)

The following works as expected, creating, deleting, and putting the item back:

zz = DoesWork.objects.create(mac_id='99:99:99:99:99:99', ip='127.0.0.1')
zz.delete() # remove from DB
zz.save() # it's back in the DB

However, if I use the DoesNotWork model, whose only difference is having a CharField as a primary key:

zz = DoesNotWork.objects.create(mac_id='99:99:99:99:99:99', ip='127.0.0.1')
zz.delete() # remove from DB
zz.save() # EXCEPTION THROWN:

IntegrityError: (1048, "Column 'mac_id' cannot be null")

I checked by printing out zz.__dict__, and the mac_id was 'None' with the DoesNotWork object, but was untouched with the DoesWork object.

Change History (1)

comment:1 by Russell Keith-Magee, 14 years ago

Description: modified (diff)

Corrected formatting. Please use preview.

Note: See TracTickets for help on using tickets.
Back to Top