eine Dauerwelle Erstellen ohne DB bedeutet, dass Sie nicht django Berechtigungssystem verwendet werden soll. In diesem Punkt würde ich fragen, warum Sie es nicht verwenden möchten?
Wenn es in Ordnung ist django Erlaubnis sywstem zu verwenden, können Sie eine Berechtigung erstellen und überprüfen von admin speichern Methode overrriding ... wie:
in Ihrem models.py
class SomeModel(Model):
your_spec_field = FieldType(...)
class Meta:
permissions = (
("some_perm", u"A name for your default permission"),
)
In Ihrem verwandten admin.py
class SomeModelAdmin(ModelAdmin):
def save_model(self, request, obj, form, change):
if change:
curr_value = SomeModel.objects.get(pk=obj.id)
if not request.user.has_perm('<your_app>.some_perm'):
obj.your_spec_field = curr_value.your_spec_field
else:
if not request.user.has_perm('<your_app>.some_perm')
obj.your_spec_field = '' # or the default value according to your field type
obj.save()
Bei diesem Ansatz, erhalten Sie den Status der zugehörigen Datensatz, bevor Sie es für ähnliche Erlaubnis speichern und überprüfen. Wenn der Benutzer nicht die erforderliche Dauerwelle hat. dann ersetzen Sie den Wert Ihres Felds durch den vorherigen. Wenn dies ein neuer Datensatz ist, legen Sie dieses Feld auf einen beliebigen Wert fest.
Meinst du '/ admin/auth/group/add /'? –
danke, aber ich muss spezifische Erlaubnis erstellen. Nur Benutzer mit dieser Berechtigung können das spezifische Modellfeld ändern. Ich muss nur ein Feld 'readonly' für einige Benutzer erstellen. –
Sie können eine benutzerdefinierte Berechtigung wie 'can_change_xy' definieren und diese Berechtigung explizit mit' user.has_perm() 'in Ihrer Ansichtsfunktion überprüfen. Soweit ich weiß, gibt es keine generische Lösung für einzelne Feldberechtigungen. Siehe http://docs.djangoproject.com/en/dev/topics/auth/#custom-permissions und http://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.models .User.has_perm. –