14. Using a custom primary key
These docs are frozen for Django version 0.91. For current documentation, go here.
By default, Django adds an "id" field to each model. But you can override this behavior by explicitly adding primary_key=True to a field.
Model source code
from django.core import meta
class Employee(meta.Model):
employee_code = meta.CharField(maxlength=10, primary_key=True)
first_name = meta.CharField(maxlength=20)
last_name = meta.CharField(maxlength=20)
class META:
ordering = ('last_name', 'first_name')
def __repr__(self):
return "%s %s" % (self.first_name, self.last_name)
class Business(meta.Model):
name = meta.CharField(maxlength=20, primary_key=True)
employees = meta.ManyToManyField(Employee)
class META:
verbose_name_plural = 'businesses'
module_name = 'businesses'
def __repr__(self):
return self.name
API reference
Employee objects have the following methods:
- delete()
- get_business()
- get_business_count()
- get_business_list()
- save()
- set_businesses()
Business objects have the following methods:
- delete()
- get_employee_list()
- save()
- set_employees()
Sample API usage
This sample code assumes the above models have been saved in a file examplemodel.py.
>>> from django.models.examplemodel import employees, businesses
>>> dan = employees.Employee(employee_code='ABC123', first_name='Dan', last_name='Jones')
>>> dan.save()
>>> employees.get_list()
[Dan Jones]
>>> fran = employees.Employee(employee_code='XYZ456', first_name='Fran', last_name='Bones')
>>> fran.save()
>>> employees.get_list()
[Fran Bones, Dan Jones]
>>> employees.get_object(pk='ABC123')
Dan Jones
>>> employees.get_object(pk='XYZ456')
Fran Bones
>>> employees.get_object(pk='foo')
Traceback (most recent call last):
...
EmployeeDoesNotExist: Employee does not exist for {'pk': 'foo', 'order_by': ()}
# Fran got married and changed her last name.
>>> fran = employees.get_object(pk='XYZ456')
>>> fran.last_name = 'Jones'
>>> fran.save()
>>> employees.get_list(last_name__exact='Jones')
[Dan Jones, Fran Jones]
>>> employees.get_in_bulk(['ABC123', 'XYZ456'])
{'XYZ456': Fran Jones, 'ABC123': Dan Jones}
>>> b = businesses.Business(name='Sears')
>>> b.save()
>>> b.set_employees([dan.employee_code, fran.employee_code])
True
>>> b.get_employee_list()
[Dan Jones, Fran Jones]
>>> fran.get_business_list()
[Sears]
>>> businesses.get_in_bulk(['Sears'])
{'Sears': Sears}

