Django Assign-perm mit Post-Save-Signal

Ich habe ein Django-Modell namens archive , das an eine group (django auth) durch einen Fremdschlüssel gebunden ist. Damit ein Benutzer etwas in diesem Archiv bearbeiten kann, müssen sie die Erlaubnis haben, dies durch django-guardian zu tun. Ich kann ein Archiv mit einer Gruppe verknüpfen, wie in meinem Code unten gezeigt, aber ich muss in der Lage sein, per-Objekt (Archiv) -Permissionen mit jeder Gruppe auch zu setzen. Ich suche dies mit einem post_save oder post_delete Signal zu tun (um Orphan-Berechtigungen richtig zu verhindern).

Mit anderen Worten, hier sind die Schritte, die ich erreichen möchte. Besuchen Sie die Admin-Seite. Erstellen / Bearbeiten einer Instanz des Archive . Geben Sie auf dieser Seite an, welche Benutzergruppe mit dem jeweiligen Archive. verknüpft werden soll Archive. Nach dem Speichern dieser Instanz sollte Django automatisch die angegebene Gruppe mit 'Lese' Berechtigungen für diese Instanz von Archive authentifizieren.

Welche Datei würde ich Archive_post_save_handler speichern? Models.py? Wie es steht, kann ich keine Gruppenberechtigungen zuweisen, weil ich denke, dass ich Schwierigkeiten habe, Objekte durch meine Funktionen zu übergeben. Wie kann ich das erreichen? Als Bonus-Frage, wird dieser Haken auch gelten, wenn ich das Modell durch eine Shell bearbeitet?

Models.py

 from django.db import models from django.contrib.auth.models import Group from django.db.models.signals import * from django.dispatch import receiver class Archive(models.Model): name = models.CharField(max_length = 30) nickname = models.CharField(max_length = 30, blank=True) Group = models.ForeignKey(Group, blank=True, null=True, help_text='A group of users that are allowed access to the archive. This should typically be called the same thing as the archive name.') class Meta: permissions = ( ('read', 'Read Archive'), ) def __unicode__(self): return self.name @receiver(post_save, sender=Archive) def Archive_post_save_handler(sender, instance, **kwarks): group = Group.objects.get(name=instance.Group) assign_perm('read', group, instance) #what I primarily want to accomplish in this question is on this line 

One Solution collect form web for “Django Assign-perm mit Post-Save-Signal”

Ich denke, der Code, den Sie hier eingefügt haben, wird einen rekursiven Aufruf von Archive_post_save_handler , da die letzte Codezeile auch ein anderes post_save Signal post_save . Sie sollten das created Argument von den Kwargs erhalten, um zu testen, ob die Instanz zum ersten Mal erstellt wird.

  • Scheiben-Endpunkte unsichtbar abgeschnitten
  • PySpark: Mittelwert und die Anzahl der Werte um den Mittelwert für Gruppen innerhalb eines Dataframs abrufen
  • Wie kann ich Eingaben als Integer lesen?
  • Flaschenprotokollierung - Kann es nicht auf eine Datei schreiben
  • Wie man einen Unicode csv in Python 2.7 schreibt
  • Konvertieren von CSV in JSON (in bestimmten Format) mit Python
  • Ende der Unterstützung für Python 2.7?
  • Wie liest man eine Datei Zeile für Zeile, dann drucken Sie die Zeile, wenn es einen String mit einem Bereich von Wert in Python enthält?
  • Python ist die beste Programmiersprache der Welt.