thirdparty/google_appengine/lib/django/tests/modeltests/invalid_models/models.py
changeset 2866 a04b1e4126c4
parent 2864 2e0b0af889be
child 2868 9f7f269383f7
equal deleted inserted replaced
2864:2e0b0af889be 2866:a04b1e4126c4
     1 """
       
     2 26. Invalid models
       
     3 
       
     4 This example exists purely to point out errors in models.
       
     5 """
       
     6 
       
     7 from django.db import models
       
     8 
       
     9 class FieldErrors(models.Model):
       
    10     charfield = models.CharField()
       
    11     floatfield = models.FloatField()
       
    12     filefield = models.FileField()
       
    13     prepopulate = models.CharField(maxlength=10, prepopulate_from='bad')
       
    14     choices = models.CharField(maxlength=10, choices='bad')
       
    15     choices2 = models.CharField(maxlength=10, choices=[(1,2,3),(1,2,3)])
       
    16     index = models.CharField(maxlength=10, db_index='bad')
       
    17 
       
    18 class Target(models.Model):
       
    19     tgt_safe = models.CharField(maxlength=10)
       
    20     clash1 = models.CharField(maxlength=10)
       
    21     clash2 = models.CharField(maxlength=10)
       
    22 
       
    23     clash1_set = models.CharField(maxlength=10)
       
    24 
       
    25 class Clash1(models.Model):
       
    26     src_safe = models.CharField(maxlength=10, core=True)
       
    27 
       
    28     foreign = models.ForeignKey(Target)
       
    29     m2m = models.ManyToManyField(Target)
       
    30 
       
    31 class Clash2(models.Model):
       
    32     src_safe = models.CharField(maxlength=10, core=True)
       
    33 
       
    34     foreign_1 = models.ForeignKey(Target, related_name='id')
       
    35     foreign_2 = models.ForeignKey(Target, related_name='src_safe')
       
    36 
       
    37     m2m_1 = models.ManyToManyField(Target, related_name='id')
       
    38     m2m_2 = models.ManyToManyField(Target, related_name='src_safe')
       
    39 
       
    40 class Target2(models.Model):
       
    41     clash3 = models.CharField(maxlength=10)
       
    42     foreign_tgt = models.ForeignKey(Target)
       
    43     clashforeign_set = models.ForeignKey(Target)
       
    44 
       
    45     m2m_tgt = models.ManyToManyField(Target)
       
    46     clashm2m_set = models.ManyToManyField(Target)
       
    47 
       
    48 class Clash3(models.Model):
       
    49     src_safe = models.CharField(maxlength=10, core=True)
       
    50     
       
    51     foreign_1 = models.ForeignKey(Target2, related_name='foreign_tgt')
       
    52     foreign_2 = models.ForeignKey(Target2, related_name='m2m_tgt')
       
    53 
       
    54     m2m_1 = models.ManyToManyField(Target2, related_name='foreign_tgt')
       
    55     m2m_2 = models.ManyToManyField(Target2, related_name='m2m_tgt')
       
    56 
       
    57 class ClashForeign(models.Model):
       
    58     foreign = models.ForeignKey(Target2)
       
    59 
       
    60 class ClashM2M(models.Model):
       
    61     m2m = models.ManyToManyField(Target2)
       
    62 
       
    63 class SelfClashForeign(models.Model):
       
    64     src_safe = models.CharField(maxlength=10, core=True)
       
    65     selfclashforeign = models.CharField(maxlength=10)
       
    66 
       
    67     selfclashforeign_set = models.ForeignKey("SelfClashForeign")
       
    68     foreign_1 = models.ForeignKey("SelfClashForeign", related_name='id')
       
    69     foreign_2 = models.ForeignKey("SelfClashForeign", related_name='src_safe')
       
    70 
       
    71 class ValidM2M(models.Model):
       
    72     src_safe = models.CharField(maxlength=10)
       
    73     validm2m = models.CharField(maxlength=10)
       
    74 
       
    75     # M2M fields are symmetrical by default. Symmetrical M2M fields
       
    76     # on self don't require a related accessor, so many potential
       
    77     # clashes are avoided.
       
    78     validm2m_set = models.ManyToManyField("ValidM2M")
       
    79     
       
    80     m2m_1 = models.ManyToManyField("ValidM2M", related_name='id')
       
    81     m2m_2 = models.ManyToManyField("ValidM2M", related_name='src_safe')
       
    82 
       
    83     m2m_3 = models.ManyToManyField('self')
       
    84     m2m_4 = models.ManyToManyField('self')
       
    85 
       
    86 class SelfClashM2M(models.Model):
       
    87     src_safe = models.CharField(maxlength=10)
       
    88     selfclashm2m = models.CharField(maxlength=10)
       
    89 
       
    90     # Non-symmetrical M2M fields _do_ have related accessors, so 
       
    91     # there is potential for clashes.
       
    92     selfclashm2m_set = models.ManyToManyField("SelfClashM2M", symmetrical=False)
       
    93     
       
    94     m2m_1 = models.ManyToManyField("SelfClashM2M", related_name='id', symmetrical=False)
       
    95     m2m_2 = models.ManyToManyField("SelfClashM2M", related_name='src_safe', symmetrical=False)
       
    96 
       
    97     m2m_3 = models.ManyToManyField('self', symmetrical=False)
       
    98     m2m_4 = models.ManyToManyField('self', symmetrical=False)
       
    99 
       
   100 model_errors = """invalid_models.fielderrors: "charfield": CharFields require a "maxlength" attribute.
       
   101 invalid_models.fielderrors: "floatfield": FloatFields require a "decimal_places" attribute.
       
   102 invalid_models.fielderrors: "floatfield": FloatFields require a "max_digits" attribute.
       
   103 invalid_models.fielderrors: "filefield": FileFields require an "upload_to" attribute.
       
   104 invalid_models.fielderrors: "prepopulate": prepopulate_from should be a list or tuple.
       
   105 invalid_models.fielderrors: "choices": "choices" should be iterable (e.g., a tuple or list).
       
   106 invalid_models.fielderrors: "choices2": "choices" should be a sequence of two-tuples.
       
   107 invalid_models.fielderrors: "choices2": "choices" should be a sequence of two-tuples.
       
   108 invalid_models.fielderrors: "index": "db_index" should be either None, True or False.
       
   109 invalid_models.clash1: Accessor for field 'foreign' clashes with field 'Target.clash1_set'. Add a related_name argument to the definition for 'foreign'.
       
   110 invalid_models.clash1: Accessor for field 'foreign' clashes with related m2m field 'Target.clash1_set'. Add a related_name argument to the definition for 'foreign'.
       
   111 invalid_models.clash1: Reverse query name for field 'foreign' clashes with field 'Target.clash1'. Add a related_name argument to the definition for 'foreign'.
       
   112 invalid_models.clash1: Accessor for m2m field 'm2m' clashes with field 'Target.clash1_set'. Add a related_name argument to the definition for 'm2m'.
       
   113 invalid_models.clash1: Accessor for m2m field 'm2m' clashes with related field 'Target.clash1_set'. Add a related_name argument to the definition for 'm2m'.
       
   114 invalid_models.clash1: Reverse query name for m2m field 'm2m' clashes with field 'Target.clash1'. Add a related_name argument to the definition for 'm2m'.
       
   115 invalid_models.clash2: Accessor for field 'foreign_1' clashes with field 'Target.id'. Add a related_name argument to the definition for 'foreign_1'.
       
   116 invalid_models.clash2: Accessor for field 'foreign_1' clashes with related m2m field 'Target.id'. Add a related_name argument to the definition for 'foreign_1'.
       
   117 invalid_models.clash2: Reverse query name for field 'foreign_1' clashes with field 'Target.id'. Add a related_name argument to the definition for 'foreign_1'.
       
   118 invalid_models.clash2: Reverse query name for field 'foreign_1' clashes with related m2m field 'Target.id'. Add a related_name argument to the definition for 'foreign_1'.
       
   119 invalid_models.clash2: Accessor for field 'foreign_2' clashes with related m2m field 'Target.src_safe'. Add a related_name argument to the definition for 'foreign_2'.
       
   120 invalid_models.clash2: Reverse query name for field 'foreign_2' clashes with related m2m field 'Target.src_safe'. Add a related_name argument to the definition for 'foreign_2'.
       
   121 invalid_models.clash2: Accessor for m2m field 'm2m_1' clashes with field 'Target.id'. Add a related_name argument to the definition for 'm2m_1'.
       
   122 invalid_models.clash2: Accessor for m2m field 'm2m_1' clashes with related field 'Target.id'. Add a related_name argument to the definition for 'm2m_1'.
       
   123 invalid_models.clash2: Reverse query name for m2m field 'm2m_1' clashes with field 'Target.id'. Add a related_name argument to the definition for 'm2m_1'.
       
   124 invalid_models.clash2: Reverse query name for m2m field 'm2m_1' clashes with related field 'Target.id'. Add a related_name argument to the definition for 'm2m_1'.
       
   125 invalid_models.clash2: Accessor for m2m field 'm2m_2' clashes with related field 'Target.src_safe'. Add a related_name argument to the definition for 'm2m_2'.
       
   126 invalid_models.clash2: Reverse query name for m2m field 'm2m_2' clashes with related field 'Target.src_safe'. Add a related_name argument to the definition for 'm2m_2'.
       
   127 invalid_models.clash3: Accessor for field 'foreign_1' clashes with field 'Target2.foreign_tgt'. Add a related_name argument to the definition for 'foreign_1'.
       
   128 invalid_models.clash3: Accessor for field 'foreign_1' clashes with related m2m field 'Target2.foreign_tgt'. Add a related_name argument to the definition for 'foreign_1'.
       
   129 invalid_models.clash3: Reverse query name for field 'foreign_1' clashes with field 'Target2.foreign_tgt'. Add a related_name argument to the definition for 'foreign_1'.
       
   130 invalid_models.clash3: Reverse query name for field 'foreign_1' clashes with related m2m field 'Target2.foreign_tgt'. Add a related_name argument to the definition for 'foreign_1'.
       
   131 invalid_models.clash3: Accessor for field 'foreign_2' clashes with m2m field 'Target2.m2m_tgt'. Add a related_name argument to the definition for 'foreign_2'.
       
   132 invalid_models.clash3: Accessor for field 'foreign_2' clashes with related m2m field 'Target2.m2m_tgt'. Add a related_name argument to the definition for 'foreign_2'.
       
   133 invalid_models.clash3: Reverse query name for field 'foreign_2' clashes with m2m field 'Target2.m2m_tgt'. Add a related_name argument to the definition for 'foreign_2'.
       
   134 invalid_models.clash3: Reverse query name for field 'foreign_2' clashes with related m2m field 'Target2.m2m_tgt'. Add a related_name argument to the definition for 'foreign_2'.
       
   135 invalid_models.clash3: Accessor for m2m field 'm2m_1' clashes with field 'Target2.foreign_tgt'. Add a related_name argument to the definition for 'm2m_1'.
       
   136 invalid_models.clash3: Accessor for m2m field 'm2m_1' clashes with related field 'Target2.foreign_tgt'. Add a related_name argument to the definition for 'm2m_1'.
       
   137 invalid_models.clash3: Reverse query name for m2m field 'm2m_1' clashes with field 'Target2.foreign_tgt'. Add a related_name argument to the definition for 'm2m_1'.
       
   138 invalid_models.clash3: Reverse query name for m2m field 'm2m_1' clashes with related field 'Target2.foreign_tgt'. Add a related_name argument to the definition for 'm2m_1'.
       
   139 invalid_models.clash3: Accessor for m2m field 'm2m_2' clashes with m2m field 'Target2.m2m_tgt'. Add a related_name argument to the definition for 'm2m_2'.
       
   140 invalid_models.clash3: Accessor for m2m field 'm2m_2' clashes with related field 'Target2.m2m_tgt'. Add a related_name argument to the definition for 'm2m_2'.
       
   141 invalid_models.clash3: Reverse query name for m2m field 'm2m_2' clashes with m2m field 'Target2.m2m_tgt'. Add a related_name argument to the definition for 'm2m_2'.
       
   142 invalid_models.clash3: Reverse query name for m2m field 'm2m_2' clashes with related field 'Target2.m2m_tgt'. Add a related_name argument to the definition for 'm2m_2'.
       
   143 invalid_models.clashforeign: Accessor for field 'foreign' clashes with field 'Target2.clashforeign_set'. Add a related_name argument to the definition for 'foreign'.
       
   144 invalid_models.clashm2m: Accessor for m2m field 'm2m' clashes with m2m field 'Target2.clashm2m_set'. Add a related_name argument to the definition for 'm2m'.
       
   145 invalid_models.target2: Accessor for field 'foreign_tgt' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'foreign_tgt'.
       
   146 invalid_models.target2: Accessor for field 'foreign_tgt' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'foreign_tgt'.
       
   147 invalid_models.target2: Accessor for field 'foreign_tgt' clashes with related field 'Target.target2_set'. Add a related_name argument to the definition for 'foreign_tgt'.
       
   148 invalid_models.target2: Accessor for field 'clashforeign_set' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'clashforeign_set'.
       
   149 invalid_models.target2: Accessor for field 'clashforeign_set' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'clashforeign_set'.
       
   150 invalid_models.target2: Accessor for field 'clashforeign_set' clashes with related field 'Target.target2_set'. Add a related_name argument to the definition for 'clashforeign_set'.
       
   151 invalid_models.target2: Accessor for m2m field 'm2m_tgt' clashes with related field 'Target.target2_set'. Add a related_name argument to the definition for 'm2m_tgt'.
       
   152 invalid_models.target2: Accessor for m2m field 'm2m_tgt' clashes with related field 'Target.target2_set'. Add a related_name argument to the definition for 'm2m_tgt'.
       
   153 invalid_models.target2: Accessor for m2m field 'm2m_tgt' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'm2m_tgt'.
       
   154 invalid_models.target2: Accessor for m2m field 'm2m_tgt' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'm2m_tgt'.
       
   155 invalid_models.target2: Accessor for m2m field 'm2m_tgt' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'm2m_tgt'.
       
   156 invalid_models.target2: Accessor for m2m field 'clashm2m_set' clashes with related field 'Target.target2_set'. Add a related_name argument to the definition for 'clashm2m_set'.
       
   157 invalid_models.target2: Accessor for m2m field 'clashm2m_set' clashes with related field 'Target.target2_set'. Add a related_name argument to the definition for 'clashm2m_set'.
       
   158 invalid_models.target2: Accessor for m2m field 'clashm2m_set' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'clashm2m_set'.
       
   159 invalid_models.target2: Accessor for m2m field 'clashm2m_set' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'clashm2m_set'.
       
   160 invalid_models.target2: Accessor for m2m field 'clashm2m_set' clashes with related m2m field 'Target.target2_set'. Add a related_name argument to the definition for 'clashm2m_set'.
       
   161 invalid_models.selfclashforeign: Accessor for field 'selfclashforeign_set' clashes with field 'SelfClashForeign.selfclashforeign_set'. Add a related_name argument to the definition for 'selfclashforeign_set'.
       
   162 invalid_models.selfclashforeign: Reverse query name for field 'selfclashforeign_set' clashes with field 'SelfClashForeign.selfclashforeign'. Add a related_name argument to the definition for 'selfclashforeign_set'.
       
   163 invalid_models.selfclashforeign: Accessor for field 'foreign_1' clashes with field 'SelfClashForeign.id'. Add a related_name argument to the definition for 'foreign_1'.
       
   164 invalid_models.selfclashforeign: Reverse query name for field 'foreign_1' clashes with field 'SelfClashForeign.id'. Add a related_name argument to the definition for 'foreign_1'.
       
   165 invalid_models.selfclashforeign: Accessor for field 'foreign_2' clashes with field 'SelfClashForeign.src_safe'. Add a related_name argument to the definition for 'foreign_2'.
       
   166 invalid_models.selfclashforeign: Reverse query name for field 'foreign_2' clashes with field 'SelfClashForeign.src_safe'. Add a related_name argument to the definition for 'foreign_2'.
       
   167 invalid_models.selfclashm2m: Accessor for m2m field 'selfclashm2m_set' clashes with m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'selfclashm2m_set'.
       
   168 invalid_models.selfclashm2m: Reverse query name for m2m field 'selfclashm2m_set' clashes with field 'SelfClashM2M.selfclashm2m'. Add a related_name argument to the definition for 'selfclashm2m_set'.
       
   169 invalid_models.selfclashm2m: Accessor for m2m field 'selfclashm2m_set' clashes with related m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'selfclashm2m_set'.
       
   170 invalid_models.selfclashm2m: Accessor for m2m field 'm2m_1' clashes with field 'SelfClashM2M.id'. Add a related_name argument to the definition for 'm2m_1'.
       
   171 invalid_models.selfclashm2m: Accessor for m2m field 'm2m_2' clashes with field 'SelfClashM2M.src_safe'. Add a related_name argument to the definition for 'm2m_2'.
       
   172 invalid_models.selfclashm2m: Reverse query name for m2m field 'm2m_1' clashes with field 'SelfClashM2M.id'. Add a related_name argument to the definition for 'm2m_1'.
       
   173 invalid_models.selfclashm2m: Reverse query name for m2m field 'm2m_2' clashes with field 'SelfClashM2M.src_safe'. Add a related_name argument to the definition for 'm2m_2'.
       
   174 invalid_models.selfclashm2m: Accessor for m2m field 'm2m_3' clashes with m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_3'.
       
   175 invalid_models.selfclashm2m: Accessor for m2m field 'm2m_3' clashes with related m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_3'.
       
   176 invalid_models.selfclashm2m: Accessor for m2m field 'm2m_3' clashes with related m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_3'.
       
   177 invalid_models.selfclashm2m: Accessor for m2m field 'm2m_4' clashes with m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_4'.
       
   178 invalid_models.selfclashm2m: Accessor for m2m field 'm2m_4' clashes with related m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_4'.
       
   179 invalid_models.selfclashm2m: Accessor for m2m field 'm2m_4' clashes with related m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_4'.
       
   180 invalid_models.selfclashm2m: Reverse query name for m2m field 'm2m_3' clashes with field 'SelfClashM2M.selfclashm2m'. Add a related_name argument to the definition for 'm2m_3'.
       
   181 invalid_models.selfclashm2m: Reverse query name for m2m field 'm2m_4' clashes with field 'SelfClashM2M.selfclashm2m'. Add a related_name argument to the definition for 'm2m_4'.
       
   182 """