介绍

译者的话

身为PythonWeb开发热爱者

希望能对开源社区做出一些贡献。

本人能力有限,难免有疏漏或者表意不当的地方。 如果译文中有什么错漏的地方请大家见谅,也欢迎大家随时指正。QQ: 189219902

中文翻译

Django Admin Cookbook介绍

Django Admin Cookbook 是一本关于Django Admin 模块的书

它面向Django的对DjangoAdmin有一些使用经验但是想要扩大对DjangoAdmin的认知甚至想要精通DjangoAdmin的中级Django开发者.

它采用问答的形式来讨论关于你可能会使用DjangoAdmin完成的常见任务。

所有章节均基于一组通用模型:

App entities

  1. class Category(models.Model):
  2. name = models.CharField(max_length=100)
  3. class Meta:
  4. verbose_name_plural = "Categories"
  5. def __str__(self):
  6. return self.name
  7. class Origin(models.Model):
  8. name = models.CharField(max_length=100)
  9. def __str__(self):
  10. return self.name
  11. class Entity(models.Model):
  12. GENDER_MALE = "Male"
  13. GENDER_FEMALE = "Female"
  14. GENDER_OTHERS = "Others/Unknown"
  15. name = models.CharField(max_length=100)
  16. alternative_name = models.CharField(
  17. max_length=100, null=True, blank=True
  18. )
  19. category = models.ForeignKey(Category, on_delete=models.CASCADE)
  20. origin = models.ForeignKey(Origin, on_delete=models.CASCADE)
  21. gender = models.CharField(
  22. max_length=100,
  23. choices=(
  24. (GENDER_MALE, GENDER_MALE),
  25. (GENDER_FEMALE, GENDER_FEMALE),
  26. (GENDER_OTHERS, GENDER_OTHERS),
  27. )
  28. )
  29. description = models.TextField()
  30. def __str__(self):
  31. return self.name
  32. class Meta:
  33. abstract = True
  34. class Hero(Entity):
  35. class Meta:
  36. verbose_name_plural = "Heroes"
  37. is_immortal = models.BooleanField(default=True)
  38. benevolence_factor = models.PositiveSmallIntegerField(
  39. help_text="How benevolent this hero is?"
  40. )
  41. arbitrariness_factor = models.PositiveSmallIntegerField(
  42. help_text="How arbitrary this hero is?"
  43. )
  44. # relationships
  45. father = models.ForeignKey(
  46. "self", related_name="+", null=True, blank=True, on_delete=models.SET_NULL
  47. )
  48. mother = models.ForeignKey(
  49. "self", related_name="+", null=True, blank=True, on_delete=models.SET_NULL
  50. )
  51. spouse = models.ForeignKey(
  52. "self", related_name="+", null=True, blank=True, on_delete=models.SET_NULL
  53. )
  54. class Villain(Entity):
  55. is_immortal = models.BooleanField(default=False)
  56. malevolence_factor = models.PositiveSmallIntegerField(
  57. help_text="How malevolent this villain is?"
  58. )
  59. power_factor = models.PositiveSmallIntegerField(
  60. help_text="How powerful this villain is?"
  61. )
  62. is_unique = models.BooleanField(default=True)
  63. count = models.PositiveSmallIntegerField(default=1)###

App events

  1. name = models.CharField(max_length=255)
  2. participating_heroes = models.ManyToManyField(Hero)
  3. participating_villains = models.ManyToManyField(Villain)
  4. class Event(models.Model):
  5. epic = models.ForeignKey(Epic, on_delete=models.CASCADE)
  6. details = models.TextField()
  7. years_ago = models.PositiveIntegerField()
  8. class EventHero(models.Model):
  9. event = models.ForeignKey(Event, on_delete=models.CASCADE)
  10. hero = models.ForeignKey(Hero, on_delete=models.CASCADE)
  11. is_primary = models.BooleanField()
  12. class EventVillain(models.Model):
  13. event = models.ForeignKey(Event, on_delete=models.CASCADE)
  14. hero = models.ForeignKey(Villain, on_delete=models.CASCADE)
  15. is_primary = models.BooleanField()

如何使用这本书

你可以把这本书从头读到尾,也可以选择你需要的章节读,每一个章节是独立的,特定的任务

无论如何,你都应该先读entities/models.pyevents/models.py

英文原文Django Admin Cookbook