Django

Code

Show
Ignore:
Timestamp:
07/29/08 07:41:08 (5 months ago)
Author:
russellm
Message:

Fixed #6095 -- Added the ability to specify the model to use to manage a ManyToManyField?. Thanks to Eric Florenzano for his excellent work on this patch.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/tests/modeltests/invalid_models/models.py

    r7967 r8136  
    111111    rel1 = models.ForeignKey("Rel1") 
    112112    rel2 = models.ManyToManyField("Rel2") 
     113     
     114class MissingManualM2MModel(models.Model): 
     115    name = models.CharField(max_length=5) 
     116    missing_m2m = models.ManyToManyField(Model, through="MissingM2MModel") 
     117     
     118class Person(models.Model): 
     119    name = models.CharField(max_length=5) 
     120 
     121class Group(models.Model): 
     122    name = models.CharField(max_length=5) 
     123    primary = models.ManyToManyField(Person, through="Membership", related_name="primary") 
     124    secondary = models.ManyToManyField(Person, through="Membership", related_name="secondary") 
     125    tertiary = models.ManyToManyField(Person, through="RelationshipDoubleFK", related_name="tertiary") 
     126 
     127class GroupTwo(models.Model): 
     128    name = models.CharField(max_length=5) 
     129    primary = models.ManyToManyField(Person, through="Membership") 
     130    secondary = models.ManyToManyField(Group, through="MembershipMissingFK") 
     131 
     132class Membership(models.Model): 
     133    person = models.ForeignKey(Person) 
     134    group = models.ForeignKey(Group) 
     135    not_default_or_null = models.CharField(max_length=5) 
     136 
     137class MembershipMissingFK(models.Model): 
     138    person = models.ForeignKey(Person) 
     139 
     140class PersonSelfRefM2M(models.Model): 
     141    name = models.CharField(max_length=5) 
     142    friends = models.ManyToManyField('self', through="Relationship") 
     143    too_many_friends = models.ManyToManyField('self', through="RelationshipTripleFK") 
     144 
     145class PersonSelfRefM2MExplicit(models.Model): 
     146    name = models.CharField(max_length=5) 
     147    friends = models.ManyToManyField('self', through="ExplicitRelationship", symmetrical=True) 
     148 
     149class Relationship(models.Model): 
     150    first = models.ForeignKey(PersonSelfRefM2M, related_name="rel_from_set") 
     151    second = models.ForeignKey(PersonSelfRefM2M, related_name="rel_to_set") 
     152    date_added = models.DateTimeField() 
     153 
     154class ExplicitRelationship(models.Model): 
     155    first = models.ForeignKey(PersonSelfRefM2MExplicit, related_name="rel_from_set") 
     156    second = models.ForeignKey(PersonSelfRefM2MExplicit, related_name="rel_to_set") 
     157    date_added = models.DateTimeField() 
     158 
     159class RelationshipTripleFK(models.Model): 
     160    first = models.ForeignKey(PersonSelfRefM2M, related_name="rel_from_set_2") 
     161    second = models.ForeignKey(PersonSelfRefM2M, related_name="rel_to_set_2") 
     162    third = models.ForeignKey(PersonSelfRefM2M, related_name="too_many_by_far") 
     163    date_added = models.DateTimeField() 
     164 
     165class RelationshipDoubleFK(models.Model): 
     166    first = models.ForeignKey(Person, related_name="first_related_name") 
     167    second = models.ForeignKey(Person, related_name="second_related_name") 
     168    third = models.ForeignKey(Group, related_name="rel_to_set") 
     169    date_added = models.DateTimeField() 
    113170 
    114171model_errors = """invalid_models.fielderrors: "charfield": CharFields require a "max_length" attribute. 
     
    196253invalid_models.missingrelations: 'rel2' has m2m relation with model Rel2, which has not been installed 
    197254invalid_models.missingrelations: 'rel1' has relation with model Rel1, which has not been installed 
     255invalid_models.grouptwo: 'primary' has a manually-defined m2m relation through model Membership, which does not have foreign keys to Person and GroupTwo 
     256invalid_models.grouptwo: 'secondary' has a manually-defined m2m relation through model MembershipMissingFK, which does not have foreign keys to Group and GroupTwo 
     257invalid_models.missingmanualm2mmodel: 'missing_m2m' specifies an m2m relation through model MissingM2MModel, which has not been installed 
     258invalid_models.group: The model Group has two manually-defined m2m relations through the model Membership, which is not permitted. Please consider using an extra field on your intermediary model instead. 
     259invalid_models.group: Intermediary model RelationshipDoubleFK has more than one foreign key to Person, which is ambiguous and is not permitted. 
     260invalid_models.personselfrefm2m: Many-to-many fields with intermediate tables cannot be symmetrical. 
     261invalid_models.personselfrefm2m: Intermediary model RelationshipTripleFK has more than two foreign keys to PersonSelfRefM2M, which is ambiguous and is not permitted. 
     262invalid_models.personselfrefm2mexplicit: Many-to-many fields with intermediate tables cannot be symmetrical. 
    198263"""