Vraag Hoe bepaal je hoe je je Django-project opsplitst in apps


Ik heb een project dat ik schreef in PHP / Symfony dat 45 tabellen gebruikt. Ik ben bezig het naar Python / Django te porteren.

Ik geloof al jaren dat je je projecten in een aantal kleine bestanden moet splitsen in plaats van in een paar grote bestanden. Van wat ik begrijp, is dat geen vreemde zaak om te geloven. In Rails en symfony is er een overeenkomst van één model per bestand. In Django lijkt het er echter op dat de meeste ontwikkelaars alle modellen van elke app in één bestand stoppen.

Dit is logisch voor mij als uw apps elk klein genoeg zijn. Ik begrijp het echter niet voor grote apps, en wat ik heb, is ten minste één grote app.

Van de 45 tabellen die mijn project gebruikt, zijn er 35 nauw verwant. Ik heb een script dat gegevens uit CSV-bestanden importeert. Voor elke regel in elk CSV-bestand bewaar ik 50-80 stukjes gegevens in 30-35 verschillende tabellen in één klap.

Misschien denk ik hier gewoon verkeerd over, maar het zou ongelooflijk vreemd zijn als ik mijn project opsplits in 6 of 7 verschillende apps, terwijl bijna al mijn tafels onlosmakelijk met elkaar verbonden zijn. Als ik een tafel aanraak, raak ik alle 35 tafels aan. De afbakeningen moeten willekeurig zijn. Wat zou daar het nut van zijn?

Vergeef me als ik me vooringenomen voel, want ik ben zeker bevooroordeeld. Ik heb dit probleem niet in symfony en ik zou het niet in Rails hebben. (Ik heb Django gekozen vanwege de GIS-mogelijkheden van GeoDjango en Python.)

  • In een perfecte wereld zou ik één model per bestand hebben.
  • Als ik probeer één model per bestand te hebben, krijg ik circulaire referentieproblemen.
  • Ik zou de circulaire referentieproblemen kunnen vermijden door al mijn modellen in één bestand te plaatsen, maar dat voelt verkeerd voor mij.
  • Ik zou kunnen voorkomen dat al mijn modellen in hetzelfde bestand worden gestopt door ze in afzonderlijke apps te splitsen, maar om te eindigen met voldoende kleine apps, zou ik mijn project op willekeurige (en dus zinloze) manieren moeten opsplitsen.

Wat moet ik doen?


25
2018-02-04 18:35


oorsprong


antwoorden:


Als het hebben van één model per bestand zou het perfecte antwoord voor je zijn, daar is een app voor.

Ik heb het nog nooit gedaan op een schaal van 80 modelbestanden, maar ik kan u zeker wijzen op een andere stapelvraag:
Ongeveer 20 modellen in 1 django-app 

http://djangosnippets.org/snippets/1838/

Wat voor soort circulaire referentieproblemen heb je trouwens? Als het met ForeignKey-definities is, hier is een manier om dat ... http://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey

Je kunt ook kijken django.db.loading.get_model, maar sommigen zullen dit misschien fronsen.


4
2018-02-04 19:07