Django's ForeignKey is equivalent to Rails' belongs_to.
Django's OneToOneField is equivalent to Rails' has_one.
Django's ManyToManyField is equivalent to Rails' has_and_belongs_to_many.
Also, in Django one generally only declares the relationship from one "side", unlike Rails where the relationship is declared on both "sides" (i.e., in Django one simply sets up a ForeignKey on A pointing to B, rather than placing relationship identifiers on both A and B).
The equivalent of ":through" is also available.
Django has GenericForeignKey as an equivalent to Rails' polymorphic associations.
> Also, in Django one generally only declares the relationship from one "side", unlike Rails where the relationship is declared on both "sides" (i.e., in Django one simply sets up a ForeignKey on A pointing to B, rather than placing relationship identifiers on both A and B).
That's because django will automatically add the reverse of the relation to B, so that you can access A through B. You can disable that functionality optionally though.
https://docs.djangoproject.com/en/1.7/ref/models/fields/#mod...
In general:
Django's ForeignKey is equivalent to Rails' belongs_to.
Django's OneToOneField is equivalent to Rails' has_one.
Django's ManyToManyField is equivalent to Rails' has_and_belongs_to_many.
Also, in Django one generally only declares the relationship from one "side", unlike Rails where the relationship is declared on both "sides" (i.e., in Django one simply sets up a ForeignKey on A pointing to B, rather than placing relationship identifiers on both A and B).
The equivalent of ":through" is also available.
Django has GenericForeignKey as an equivalent to Rails' polymorphic associations.