| 1 | from django.db import models
|
|---|
| 2 |
|
|---|
| 3 | # Create your models here.
|
|---|
| 4 |
|
|---|
| 5 | # ---------------------------------------------------------------------
|
|---|
| 6 | # This reproduces the original report. The admin app show
|
|---|
| 7 | # a traceback when you click in the 'Add Child' button.
|
|---|
| 8 | class Parent(models.Model):
|
|---|
| 9 | name = models.CharField(maxlength=100)
|
|---|
| 10 | bestchild = models.ForeignKey("Child", null=True, related_name="favoured_by")
|
|---|
| 11 | class Meta:
|
|---|
| 12 | verbose_name_plural = "01. Parents"
|
|---|
| 13 |
|
|---|
| 14 | class Admin:
|
|---|
| 15 | pass
|
|---|
| 16 |
|
|---|
| 17 | class Child(models.Model):
|
|---|
| 18 | """
|
|---|
| 19 | manipulator = Child.AddManipulator()
|
|---|
| 20 | """
|
|---|
| 21 | name = models.CharField(maxlength=100)
|
|---|
| 22 | parent = models.ForeignKey(Parent)
|
|---|
| 23 | class Meta:
|
|---|
| 24 | verbose_name_plural = "02. Childs"
|
|---|
| 25 |
|
|---|
| 26 | class Admin:
|
|---|
| 27 | pass
|
|---|
| 28 |
|
|---|
| 29 | # ---------------------------------------------------------------------
|
|---|
| 30 | # This seems to demonstrate that the problem isn't related to the
|
|---|
| 31 | # forward FK declaration from Poll to Choice that uses the "Choice"
|
|---|
| 32 | # string notation as the related model spcification.
|
|---|
| 33 | # The admin traceback still exists but this time when you click in the
|
|---|
| 34 | # 'Add Choice' button.
|
|---|
| 35 | class Poll(models.Model):
|
|---|
| 36 | question = models.CharField(maxlength=200)
|
|---|
| 37 | choice = models.ForeignKey("Choice")
|
|---|
| 38 | class Meta:
|
|---|
| 39 | verbose_name_plural = "03. Polls"
|
|---|
| 40 |
|
|---|
| 41 | class Admin:
|
|---|
| 42 | pass
|
|---|
| 43 |
|
|---|
| 44 | class Choice(models.Model):
|
|---|
| 45 | choice = models.CharField(maxlength=200)
|
|---|
| 46 | assigned_poll = models.ForeignKey(Poll, null=True, related_name="preset_choice")
|
|---|
| 47 | class Meta:
|
|---|
| 48 | verbose_name_plural = "04. Choices"
|
|---|
| 49 |
|
|---|
| 50 | class Admin:
|
|---|
| 51 | pass
|
|---|
| 52 |
|
|---|
| 53 | # ---------------------------------------------------------------------
|
|---|
| 54 | # This seems to demonstrate the problems isn't related to the null=True
|
|---|
| 55 | # option. When it is used in both FK the 'Add book' button click still
|
|---|
| 56 | # generates a traceback.
|
|---|
| 57 | class Author(models.Model):
|
|---|
| 58 | name = models.CharField(maxlength=50)
|
|---|
| 59 | writting = models.ForeignKey("Book", null=True, related_name="probable_author")
|
|---|
| 60 | class Meta:
|
|---|
| 61 | verbose_name_plural = "05. Authors"
|
|---|
| 62 |
|
|---|
| 63 | class Admin:
|
|---|
| 64 | pass
|
|---|
| 65 |
|
|---|
| 66 | class Book(models.Model):
|
|---|
| 67 | title = models.CharField(maxlength=255)
|
|---|
| 68 | author = models.ForeignKey(Author, null=True, related_name="preferred_work")
|
|---|
| 69 | class Meta:
|
|---|
| 70 | verbose_name_plural = "06. Books"
|
|---|
| 71 |
|
|---|
| 72 | class Admin:
|
|---|
| 73 | pass
|
|---|
| 74 |
|
|---|
| 75 | # ---------------------------------------------------------------------
|
|---|
| 76 | # FK attribute names changed to differ from their respective related
|
|---|
| 77 | # model names, 'related_name' options dropped.
|
|---|
| 78 | # No traceback when clicking the 'Add reported' nor the 'Add article'
|
|---|
| 79 | # buttons.
|
|---|
| 80 | class Reporter(models.Model):
|
|---|
| 81 | name = models.CharField(maxlength=50)
|
|---|
| 82 | art = models.ForeignKey("Article", null=True)
|
|---|
| 83 | class Meta:
|
|---|
| 84 | verbose_name_plural = "07. Reporters"
|
|---|
| 85 |
|
|---|
| 86 | class Admin:
|
|---|
| 87 | pass
|
|---|
| 88 |
|
|---|
| 89 | class Article(models.Model):
|
|---|
| 90 | headline = models.CharField(maxlength=255)
|
|---|
| 91 | auth = models.ForeignKey(Reporter)
|
|---|
| 92 | class Meta:
|
|---|
| 93 | verbose_name_plural = "08. Articles"
|
|---|
| 94 |
|
|---|
| 95 | class Admin:
|
|---|
| 96 | pass
|
|---|
| 97 |
|
|---|
| 98 | # ---------------------------------------------------------------------
|
|---|
| 99 | # This seems to indicate the problem is related to the fact the
|
|---|
| 100 | # FK name is equal to the related model name but in lowercase
|
|---|
| 101 | # (something already hinted by bmurdock@gmail.com).
|
|---|
| 102 | # Traceback when BOTH 'Add painter' and 'Add Painting' buttons are cli-
|
|---|
| 103 | # cked.
|
|---|
| 104 | class Painter(models.Model):
|
|---|
| 105 | name = models.CharField(maxlength=50)
|
|---|
| 106 | painting = models.ForeignKey("Painting", null=True, related_name="probable_author")
|
|---|
| 107 | class Meta:
|
|---|
| 108 | verbose_name_plural = "09. Painters"
|
|---|
| 109 |
|
|---|
| 110 | class Admin:
|
|---|
| 111 | pass
|
|---|
| 112 |
|
|---|
| 113 | class Painting(models.Model):
|
|---|
| 114 | name = models.CharField(maxlength=255)
|
|---|
| 115 | painter = models.ForeignKey(Painter, related_name="best_priced_painting")
|
|---|
| 116 | class Meta:
|
|---|
| 117 | verbose_name_plural = "10. Paintings"
|
|---|
| 118 |
|
|---|
| 119 | class Admin:
|
|---|
| 120 | pass
|
|---|
| 121 |
|
|---|
| 122 | # ---------------------------------------------------------------------
|
|---|
| 123 | # Just to be sure it has nothing to do with something reported in #999
|
|---|
| 124 | # No related_name options, use the related model name in plural as the
|
|---|
| 125 | # FK attribute name.
|
|---|
| 126 | # No tracebacks.
|
|---|
| 127 | class Owner(models.Model):
|
|---|
| 128 | name = models.CharField(maxlength=50)
|
|---|
| 129 | pets = models.ForeignKey("Pet", null=True)
|
|---|
| 130 | class Meta:
|
|---|
| 131 | verbose_name_plural = "11. Owners"
|
|---|
| 132 |
|
|---|
| 133 | class Admin:
|
|---|
| 134 | pass
|
|---|
| 135 |
|
|---|
| 136 | class Pet(models.Model):
|
|---|
| 137 | nick = models.CharField(maxlength=255)
|
|---|
| 138 | owners = models.ForeignKey(Owner)
|
|---|
| 139 | class Meta:
|
|---|
| 140 | verbose_name_plural = "12. Pets"
|
|---|
| 141 |
|
|---|
| 142 | class Admin:
|
|---|
| 143 | pass
|
|---|