Jul
16
Python има проблеми с циркулярните (рекурсивни) вмъквания (circular imports) на модули в началото на файловете.
Например, ако във файла one.py се опитаме да извикаме "import two.py", а в two.py направим обратното - "import one.py", то ще изпаднем във въпросния кръгов цикличен импорт и ще счупим кода успешно
Като цяло решенията, които открих, са:
- дизайн на кода по начин, който не довежда до такива взаимни извиквания
- късни импорти (import в логиката на кода, а не в началото на модула)
В Django обаче, при взаимни връзки между апликации, се налага да се вмъкват отделни модели от models.py в различните апликации. Грешката, която извежда при подобен проблем, обикновено няма абсолютно нищо общо и трудно ще откриете проблема.
За да може да се обърнете към връзка 1:M или M:M, вариант е да посочвате името на модела като символен литерал, като по този начин не се налага да го добавяте в импортите отгоре. Например:
countries = models.ManyToManyField( 'mainapp.Country', db_table='mainapp_country_links', blank=True, null=False)
С горния начин печеля две неща: не довеждам до рекурсивно вмъкване директно, а и посочвам с db_table таблица за "many to many", в която да търси дадената връзка.
Безподобния пост.
Related posts brought to you by Yet Another Related Posts Plugin.


















..db_table='mainapp_country_links'
)
Не ти е нужно това, би трябвало само да си хване таблицата
Проблема е в Python, а решението е като подадеш апп.име_на_модел като стринг е благодарение на джанго ... как да не харесваш понита после