1. """
    
  2. Using a custom primary key
    
  3. 
    
  4. By default, Django adds an ``"id"`` field to each model. But you can override
    
  5. this behavior by explicitly adding ``primary_key=True`` to a field.
    
  6. """
    
  7. 
    
  8. from django.db import models
    
  9. 
    
  10. from .fields import MyAutoField, MyWrapperField
    
  11. 
    
  12. 
    
  13. class Employee(models.Model):
    
  14.     employee_code = models.IntegerField(primary_key=True, db_column="code")
    
  15.     first_name = models.CharField(max_length=20)
    
  16.     last_name = models.CharField(max_length=20)
    
  17. 
    
  18.     class Meta:
    
  19.         ordering = ("last_name", "first_name")
    
  20. 
    
  21.     def __str__(self):
    
  22.         return "%s %s" % (self.first_name, self.last_name)
    
  23. 
    
  24. 
    
  25. class Business(models.Model):
    
  26.     name = models.CharField(max_length=20, primary_key=True)
    
  27.     employees = models.ManyToManyField(Employee)
    
  28. 
    
  29.     class Meta:
    
  30.         verbose_name_plural = "businesses"
    
  31. 
    
  32. 
    
  33. class Bar(models.Model):
    
  34.     id = MyWrapperField(primary_key=True, db_index=True)
    
  35. 
    
  36. 
    
  37. class Foo(models.Model):
    
  38.     bar = models.ForeignKey(Bar, models.CASCADE)
    
  39. 
    
  40. 
    
  41. class CustomAutoFieldModel(models.Model):
    
  42.     id = MyAutoField(primary_key=True)