Nac*_*cho 14 django django-models
我想做这样的事情:
class Task(models.Model):
...
created_by = models.ForeignKey(User, **default=[LoggedInUser]** blank=True, null=True, related_name='created_by')
Run Code Online (Sandbox Code Playgroud)
这可能吗?除了在视图中执行request.user之外,我无法找到获取登录用户的正确方法,这在此处似乎不起作用.
PS_我意识到我可以通过其他方式初始化Model数据,但我认为这是最干净的方法.
sca*_*eos 28
如果要在管理界面中实现此目的,可以使用save_model方法.见下面的例子:
class List(models.Model):
title = models.CharField(max_length=64)
author = models.ForeignKey(User)
class ListAdmin(admin.ModelAdmin):
fields = ('title',)
def save_model(self, request, obj, form, change):
obj.author = request.user
obj.save()
Run Code Online (Sandbox Code Playgroud)
不,你不能这样做.Django(和Python)几乎没有全局值,这是一件好事(tm).通常,您会在当前用户view(request)使用request.user.然后,您可以将其作为参数传递给各种方法/函数,但尝试设置全局user只会导致多线程环境中的撕裂.
应该有一个保险杠贴纸上写着,Globals是邪恶的.这将使您对PHP的第一个问题有所了解.
已解决:\n我将使用一个示例,但重要的部分是views.py 上的函数。\n用户可通过 django 自动获得。\n请注意,\'autor\' 模型字段具有指向 \'User\' 的外键.\n在下面的“def form_valid”中,我将当前登录的用户指定为默认值。
\n\n如果这是您的型号:
\n\nclass ProspectoAccion(models.Model):\n"""\nModel representing a comment against a blog post.\n"""\n descripcion = models.TextField(max_length=1000)\n autor = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)\n accion_date = models.DateTimeField(auto_now_add=True)\n prospecto= models.ForeignKey(Prospecto, on_delete=models.CASCADE)\n tipo_accion = models.ForeignKey(\'Accion\', on_delete=models.SET_NULL, null=True)\nRun Code Online (Sandbox Code Playgroud)\n\n并且您有一个基于类的视图,请执行以下操作:
\n\nclass ProspectoAccionCreate(LoginRequiredMixin, CreateView):\n"""\nForm for adding una acci\xc3\xb3n. Requires login (despues poner)\n"""\n model = ProspectoAccion\n fields = [\'tipo_accion\',\'descripcion\',]\n\n def form_valid(self, form):\n\n #Add logged-in user as autor of comment THIS IS THE KEY TO THE SOLUTION\n form.instance.autor = self.request.user\n\n # Call super-class form validation behaviour\n return super(ProspectoAccionCreate, self).form_valid(form)\nRun Code Online (Sandbox Code Playgroud)\n\n以下是文档中的示例:\n https://docs.djangoproject.com/en/2.0/topics/class-based-views/generic-editing/#models-and-request-user
\n