2010-11-09 4 views
24

Ich werde kurz sein: Im Sinne einer Django-App zu arbeiten, ist es in Ordnung, wenn eine App Modelle aus einer anderen App importiert? Angenommen, eine App für Benutzerstatistiken importiert Modelle aus einer Benutzer-App, etwa wie folgt: from users.models Import von BenutzernTeilen von Modellen zwischen Django-Apps

+2

Beachten Sie, dass in Django Modellname Singular sein sollte. – Ski

Antwort

15

Wenn Sie eine interne App erstellen, die keine Chance hat, jemals veröffentlicht zu werden, dann tun Sie, was Sie wollen.

Wenn Sie eine interne App erstellen, die kaum eine Chance hat, jemals veröffentlicht zu werden, aber möglicherweise von zukünftigen/aktuellen Entwicklern verwendet wird, dann stellen Sie sicher, dass die App ordnungsgemäß funktioniert.

Wenn Sie eine App für die öffentliche Veröffentlichung erstellen, versuchen Sie, sie unabhängig zu halten (und django-internals abhängig, dh, verwenden Sie, was django bietet, wenn möglich). Wenn Sie wirklich eine Drittanbieter-App benötigen, um zu arbeiten, oder wenn eine Drittanbieter-App Ihren Code übersichtlicher machen würde, dann schließen Sie Abhängigkeiten ein, aber seien Sie doppelt sicher, alle Anforderungen und notwendigen Setup zu dokumentieren.

In den meisten Fällen können Sie fast alles tun, was Sie wollen, solange Sie über ausreichende Dokumentation verfügen.

Ich muss jedoch die Vernunft der Herstellung Ihrer eigenen User Modell, das den gleichen Namen wie django eingebaut auth.User hat.

+2

Es ist nicht nur derselbe Name, es ist die exakt gleiche Modellklasse. –

+0

Die User und User Statistik Apps waren nur zum Beispiel, weil mein Fall nicht so einfach zu verstehen ist. Dies beantwortet meine Frage, danke! –

-1

Tun Sie dies nicht. Sie haben den gleichen App-Namen und das ORM wird verwirrt sein. Verwenden Sie stattdessen ein abstraktes Modell, von dem beide abgeleitet sind.

+2

Haben Sie nicht verstanden, was das OP verlangt? Er sagt nichts darüber, Modelle in verschiedenen Apps identisch zu definieren, er spricht davon, die User-Klasse in seine App zu importieren, damit er daraus Daten abrufen kann. IOW, die Antwort auf diese Frage ist "Ja, natürlich können Sie." –

+0

@Daniel: Es ist möglich, dass dies der Fall ist. Wenn das OP klarstellt, wonach er sucht, werde ich es revidieren. –

+1

Sie sollten es in Betracht ziehen, es zu überarbeiten, da Sie sich bei Ihrer Interpretation eindeutig geirrt haben – Sensei

1

Sie cand versuchen besser extending the Django User model with inheritance. Sie verwenden den django-Benutzer mit einem benutzerdefinierten Feld, sodass Sie für alle Apps denselben Benutzer haben.

+2

Ich habe in der Vergangenheit mehrere Leute auf IRC (freenode # django) gesehen, die auf ein Problem nach dem anderen gestoßen sind, als sie versucht haben, 'auth.User' abzuleiten. Im Allgemeinen ist es eines dieser Dinge, von denen du dich fern halten solltest, außer du weißt, dass du es brauchst. Nebenbei sind [Benutzerprofile] (http://docs.djangoproject.com/en/1.2/topics/auth/#storing-additional-information-about-users) die allgemein bevorzugte Methode zum Speichern zusätzlicher Informationen über Benutzer. – eternicode

25

Die Antwort ist ja. Es ist vollkommen in Ordnung für eine Anwendung in Ihrem django-Projekt, Modelle aus einer anderen Anwendung zu importieren. Die Stärke eines Django-Projekts liegt in den Apps und deren Interaktionen.

Stellen Sie außerdem sicher, dass Sie über Dienstprogrammanwendungen Modelle aus eher generischen Anwendungen importieren und nicht umgekehrt. Die App "userstatistics" sollte also Modelle aus der App "users" importieren, die App "users" sollte sich jedoch nicht auf die "usstatistics" verlassen.

Wenn Ihre App Modelle aus einer Drittanbieteranwendung importiert (sagen wir Djangokolben), müssen Sie dies in einer Anforderungsdatei angeben.