Obojí možnosti ManyToManyField, jak s through=... tak i bez něho, jsou 
zcela kompatibilní. Pokud bude k nějakému účelu užitečné se odvolávat na 
vazební tabulku, lze se k umělému modelu dostat pomocí Model._meta API 
<https://docs.djangoproject.com/en/2.0/ref/models/meta/#model-meta-field-api>
.

Příklad: Někdo má modely Group a Permission. V modelu Permission je pole 
"groups". Pokud se potřebuji odvolat na vnitřní model vazební tabullky, 
mohu si uložit na něj referenci, abych nepsal dlouhé výrazy a zároveň si 
jej srozumitelně pojmenovat např. "GroupPermissions":

    GroupPermissions = Permission._meta.get_field('group').through

Nemusí se sahat na model, toto lze narychlo dodělat třeba uvnitř models.py 
nebo jednoho view nebo vyzkoušet na příkazové řádce manage.py shell. Chová 
se to, jako by explicitní "through=..." existovalo už od nepaměti. Změna 
nezpůsobí žádnou migraci ani zásah do jiného kódu.

Není mi znám žádný případ, kde by v posledních verzích Djanga bylo potřeba 
se v dotazu odvolávat na explicitní triviální vazební tabulku, ale uznávám, 
že je to s ní více intuitivní zápis. Myslí si snad někdo, že zná 
protipříklad, abych to na něm měl ukázat? V minulých letech byla vazební 
tabulka potřeba pro některé dotazy a ze setrvačnosti jsem pokračoval, ale 
letos jsem se to naučil i bez ní.

Je ohromně užitečné, že obě relace se zapisují asymetricky jen na jedné 
straně. Například model User nebo Person bývá použitý v mnoha projektech. K 
němu se může vztahovat několik aplikací a vždycky se použijí jen vybrané 
potřebné. Bylo by nežádoucí, kdyby všeobecný model musel zaviset na mnoha 
jednoúčelových modelech.

Pokud se k vazební tabulce časem přidá pole, dá se to jednoduše udělat tak, 
aby se tím v rámci migrace přidalo jen to pole, ačkoli byl dopsán nový 
explicitní vazební model. Všiml sis, že jsem si troufl pojmenovat odkaz na 
model anglicky srozumitelněji "GroupPermissions"? Raději pak použiji 
parametr `db_table='permission_group'`, než abych lámal slovosled na 
neanglické "PermissionGroup". Zkrátka lze bez obav plynule navázat ve dvou 
krocích, podle toho, jak košatý model je momentálně potřeba.

-- 
-- 
E-mailová skupina [email protected]
Správa: http://groups.google.cz/group/django-cs
--- 
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny django-cs 
ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny, zašlete 
e-mail na adresu [email protected].
Chcete-li zobrazit tuto diskusi na webu, navštivte 
https://groups.google.com/d/msgid/django-cs/af938750-9d4f-48d2-8668-6153bddcc1ec%40googlegroups.com.
Další možnosti najdete na adrese https://groups.google.com/d/optout.

Reply via email to