Django: Wie würde man dieses große Model / Manager / Design-Durcheinander organisieren?

Um es kurz zu machen, bevor ich auf schlechte Beispiele stoße: Ich versuche, eine Anwendung zu erstellen, in der ich nicht in allen meinen Modellen Code schreiben muss, um die Auswahl auf das aktuell angemeldete Konto zu beschränken (das ich nicht verwende) Auth, oder eingebaute Funktionen für das Konto oder Login).

dh ichnicht möchte so etwas tun müssen:

class Ticket(models.Model):
        account = models.ForeignKey(Account)
        client = models.ForeignKey(Client)  # A client will be owned by one account.
        content = models.CharField(max_length=255)

class TicketForm(forms.ModelForm):
        class Meta:
                model = Ticket
                exclude = ('account',)  #First sign of bad design?

        def __init__(self, *args, **kwargs):
                super(OrderForm, self).__init__(*args, **kwargs)
                if self.initial.get('account'):
                        # Here's where it gets ugly IMHO. This seems almost
                        # as bad as hard coding data. It's not DRY either.
                        self.fields['client'].queryset = Client.objects.filter(account=self.initial.get('account'))

Meine Idee ist es, eineAccount(models.Model) Modellieren Sie mit dem folgenden benutzerdefinierten Manager, und klassifizieren Sie ihn mithilfe der Mehrtabellenvererbung mit allen meinen Modellen. Es schmerzt mich allerdings sehr. Brauche ich noch eineaccount Fremdschlüssel bei jedem Modell? Kann ich für eine bestimmte Modellinstanz auf das Konto der übergeordneten Klasse zugreifen?

class TicketManager(models.Manager):
    def get_query_set(self):
        return super(TicketManager, self).get_query_set().filter(account=Account.objects.get(id=1))
        # Obviously I don't want to hard code the account like this.
        # I want to do something like this:
        # return super(ProductManager, self).get_query_set().filter(account=self.account)
        # Self being the current model that's using this manager
        # (obviously this is wrong because you're not inside a model
        # instance , but this is where the confusion comes in for me.
        # How would I do this?).

Bitte ignorieren Sie alle Syntaxfehler. Ich habe das Ganze hier eingetippt.

Hier ist die Idee dazu:Django-Namespace-Projekt

Antworten auf die Frage(3)

Ihre Antwort auf die Frage