#31310: Wrong hint about recursive relationship
-------------------------------------+-------------------------------------
     Reporter:  Matheus Cunha Motta  |                    Owner:  nobody
         Type:                       |                   Status:  new
  Cleanup/optimization               |
    Component:  Database layer       |                  Version:  3.0
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:                       |             Triage Stage:
                                     |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  1                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by Matheus Cunha Motta:

Old description:

> When there's more than 2 ForeignKeys pointing to the same model in an
> intermediary model of a m2m field and no through_fields have been set,
> Django will show an error with the following hint:
>   {{{#!python
> hint=(
>     'If you want to create a recursive relationship, '
>     'use ForeignKey("%s", symmetrical=False, through="%s").'
>   }}}
> But to create a recursive relationship the ManyToManyField should be used
> instead of ForeignKey. Also symmetrical=False should only be used with
> m2m fields, according to model field reference (link:
> https://docs.djangoproject.com/en/3.0/ref/models/fields/#django.db.models.ManyToManyField.symmetrical).
> And more than that, setting symmetrical=False is not required for
> recursive relationships since Django >= 3.0.
>
> This was probably a small mistake where the developer thought
> ManyToManyField but typed ForeignKey instead. And the symmetrical=False
> is an outdated requirement to recursive relationships, not applicable
> since 3.0. I'll provide a PR with a proposed correction shortly after.

New description:

 When there's more than 2 ForeignKeys in an intermediary model of a m2m
 field and no through_fields have been set, Django will show an error with
 the following hint:
   {{{#!python
 hint=(
     'If you want to create a recursive relationship, '
     'use ForeignKey("%s", symmetrical=False, through="%s").'
   }}}
 But 'symmetrical' and 'through' are m2m keyword arguments, not ForeignKey.

 This was probably a small mistake where the developer thought
 ManyToManyField but typed ForeignKey instead. And the symmetrical=False is
 an outdated requirement to recursive relationships with intermediary model
 to self, not required since 3.0. I'll provide a PR with a proposed
 correction shortly after.

 Edit: fixed description.

--

-- 
Ticket URL: <https://code.djangoproject.com/ticket/31310#comment:2>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/071.ca5c4fd78ead29872cb4bae3581129a7%40djangoproject.com.

Reply via email to