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.

  • Wie man einen Hex-String in Hex-Nummer umwandelt
  • Wie man Ausnahmen in Arbeiter in Multiprocessing fängt
  • Soll ich "Selbst" verwenden, um Variablen / Objekte der Klasse zu definieren, die ich nicht von außen erreichen muss?
  • Wie bekomme ich die Antwort von pycurl multi curl Anfragen
  • Python 2.7 CV2 & Tkinter mit Webcam
  • Verwenden Sie den MongoDB-Server für den Unit-Test
  • Speichern Sie SQLite 3 Daten als Variable in Python
  • Auswählen von zufälligen Elementen aus einem Spark GroupedData-Objekt
  • Pysvn bekomme neueste Revisionsnummer für spezifisches Verzeichnis (nicht Kopf)
  • Pyvot: Kann ich Excel VBA Makros aus Python-Skript ausführen?
  • Erstellung der größtmöglichen Anzahl durch Neuanordnung einer Liste
  • Python ist die beste Programmiersprache der Welt.