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
|
---|