Ich benutze djando 1.8, ich versuche den aktuell angemeldeten Benutzer in den Feldern "erstellt von" und "geändert von" in meiner Datenbank zu speichern. Ich habe viele verschiedene Kombinationen ausprobiert, um das zum Laufen zu bringen, aber ich habe kein Glück. Ich muss Code mit harten Codierung in einem Benutzer-ID arbeitet wie folgt:Django Modell Speichern, erstellt und geändert von
@python_2_unicode_compatible # only if you need to support Python 2
class Project(models.Model):
name = models.CharField(max_length=50, verbose_name="Name")
jobNumber = models.CharField(max_length=8)
shopOut = models.DateTimeField(null=True)
shopIn = models.DateTimeField(null=True)
completion = models.DateTimeField(null=True)
installation_date = models.DateTimeField(null=True)
contractor = models.ForeignKey(Contractor, on_delete=models.CASCADE, default=101)
created_by = models.ForeignKey(User, related_name='Project_created_by')
created_date = models.DateTimeField(auto_now_add=True)
modified_by = models.ForeignKey(User, related_name='Project_modified_by')
modified_date = models.DateTimeField(auto_now=True)
assigned_to = models.ForeignKey(User, related_name='Project_assigned_to', default=1)
status = models.ForeignKey('Status', related_name='Project_status', default=1)
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if not self.id:
self.created_by = User.objects.get(id=1)
#self.created_by = User.objects.get(id=kwargs['request'].user)
#self.created_by = User.objects.get(id=request.user)
self.modified_by = User.objects.get(id=1)
#self.modified_by = User.objects.get(id=kwargs['request'].user)
#self.modified_by = User.objects.get(id=request.user)
super(Project, self).save(*args, **kwargs)
year = datetime.datetime.now().year
self.jobNumber = '{}{:04d}'.format(year, self.id)
self.modified_by = User.objects.get(id=1)
#self.modified_by = User.objects.get(id=kwargs['request'].user)
#self.modified_by = User.objects.get(id=request.user)
super(Project, self).save(*args, **kwargs)
Wenn ich einen der Code versuchen, auf Kommentar:
self.created_by = User.objects.get(id=kwargs['request'].user)
oder
self.created_by = User.objects.get(id=request.user)
ich die Folgefehler:
KeyError at /admin/project/project/add/ 'request'
oder
Noch einmal meine Frage ist, wie speichere ich den aktuellen angemeldeten Benutzer in meinem created_by und modified_by Felder?
Jede Hilfe würde sehr geschätzt werden!
Es gibt kein 'request' Objekt an dem Ort, an dem Sie suchen. Sie müssen innerhalb einer View-Funktion/Klasse sein, um Zugriff auf eine "Anfrage" zu haben. Darüber hinaus können Modelle außerhalb des Kontextes einer Anfrage (z. B. in der Shell, von Signalen) modifiziert werden, so dass Sie nicht davon ausgehen können, dass, wenn 'save()' aufgerufen wird, eine Anfrage und ein eingeloggter Benutzer vorhanden sind. – solarissmoke
Beachten Sie auch, dass der Django-Administrator bereits eine Historie von Modelländerungen über den Administrator speichert (jedes Modell hat eine "History" -Ansicht). – solarissmoke