0
私はdjando 1.8を実行しています。作成したユーザーに現在ログインしているユーザーを保存しようとしています。私はこれを働かせるためにさまざまな組み合わせを試みましたが、私は運が悪いです。Djangoモデルセーブ作成者:
self.created_by = User.objects.get(id=kwargs['request'].user)
または
self.created_by = User.objects.get(id=request.user)
は、私が手に:私はコメントアウトコードのいずれかをしようとした場合
@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)
:私はそうのように、ユーザIDにハードコーディングで動作するコードを持っています次のエラー:
KeyError at /admin/project/project/add/ 'request'
または
もう一度私の質問は、現在のログインしているユーザーをcreated_byおよびmodified_byフィールドに保存する方法です。
ご協力いただければ幸いです!
あなたが探している場所には、「要求」オブジェクトがありません。 'request'にアクセスするには、ビュー関数/クラスの中にいる必要があります。さらに、モデルは要求の文脈の外で(例えば、シェルからシグナルから)変更することができるので、 'save()'が呼び出されるたびにリクエストとログインしたユーザが存在すると仮定することはできません。 – solarissmoke
また、Django管理者は、管理者が行ったモデル変更の履歴を保持しています(すべてのモデルに「履歴」ビューがあります)。 – solarissmoke