Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:如何在model.py页面上获取用户id并动态设置默认值_Django_Django Models - Fatal编程技术网

Django:如何在model.py页面上获取用户id并动态设置默认值

Django:如何在model.py页面上获取用户id并动态设置默认值,django,django-models,Django,Django Models,我在两个应用程序(项目应用程序和变量应用程序)中有两个模型(模型项目和模型变量)。这些模型之间没有任何关联。我想用变量中的值设置项目中的默认值 Model Projects: class Projects(models.Model): completion_time = models.FloatField(default='0') Model Variables: class Variables(models.Model): user_var_id = models.OneTo

我在两个应用程序(项目应用程序和变量应用程序)中有两个模型(模型项目和模型变量)。这些模型之间没有任何关联。我想用变量中的值设置项目中的默认值

Model Projects:
class Projects(models.Model):
    completion_time = models.FloatField(default='0')

Model Variables:
class Variables(models.Model):
    user_var_id = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
    internal_completion_time = models.FloatField(default='0')   
我希望用户在变量中设置一个值,当他们创建一个新项目时,默认情况下,他们会将变量中的值设置为新项目的默认值。我怎么能做这样的事

variable = Variables.Objects.Get(user_var_id=current_user_id-that i dont know how to get)

class Projects(models.Model):
    completion_time = models.FloatField(default=variable.internal_completion_time )

我认为可以通过动态添加默认值、查询变量筛选用户并将值添加到模型中来实现,但我不知道如何在model.py页面上获取当前用户id。如何使用其他方法进行保存。

如果要通过“管理”面板进行保存,请尝试以下方法:

class VariablesAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        obj.user_var_id = request.user.id
        super().save_model(request, obj, form, change)
variable = Variables()
variable.user_var_id = request.user.id
variable.save()

如果要通过api或视图集保存,请尝试以下操作:

class VariablesAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        obj.user_var_id = request.user.id
        super().save_model(request, obj, form, change)
variable = Variables()
variable.user_var_id = request.user.id
variable.save()

如果要通过管理面板保存,请尝试以下操作:

class VariablesAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        obj.user_var_id = request.user.id
        super().save_model(request, obj, form, change)
variable = Variables()
variable.user_var_id = request.user.id
variable.save()

如果要通过api或视图集保存,请尝试以下操作:

class VariablesAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        obj.user_var_id = request.user.id
        super().save_model(request, obj, form, change)
variable = Variables()
variable.user_var_id = request.user.id
variable.save()

在视图中,request.user.id将始终返回当前用户的id。您可以在查询中简单地使用它来获得所需的模型。 您还错误地将代码中的“object”和“get”大写,这是不正确的

因此,您的查询应该如下所示:

variable = Variables.objects.get(user_var_id=request.user.id)

编辑:您似乎希望访问模型文件中的“当前用户”,而不是(逻辑上)视图文件中的“当前用户”;request.user.id仅在视图中可用,因为每个视图都会收到一个请求。

在视图中,request.user.id将始终返回当前用户的id。您可以在查询中简单地使用它来获得所需的模型。 您还错误地将代码中的“object”和“get”大写,这是不正确的

因此,您的查询应该如下所示:

variable = Variables.objects.get(user_var_id=request.user.id)

编辑:您似乎希望访问模型文件中的“当前用户”,而不是(逻辑上)视图文件中的“当前用户”;request.user.id仅在视图中可用,因为每个视图都会收到一个请求。

因此,您需要的是,当用户创建项目时,它将从其变量中获取值

您可以做的是创建一个信号,这样当创建一个项目时,它将获得用户和相关字段,并将其添加到项目中,然后保存


因此,您想要的是,当用户创建项目时,它将从其变量中获取值

您可以做的是创建一个信号,这样当创建一个项目时,它将获得用户和相关字段,并将其添加到项目中,然后保存

pip安装django crequest

步骤1.将crequest添加到settings.py中已安装的_应用程序

步骤2.在验证和会话中间件之后,将crequest.middleware.CrequestMiddleware添加到中间件类中

pip安装django crequest

步骤1.将crequest添加到settings.py中已安装的_应用程序


步骤2.在验证和会话中间件之后,将crequest.middleware.CrequestMiddleware添加到中间件类。

您不需要。您不能这样做,因为模型是不知道请求的。此外,管理命令甚至根本没有用户。您没有。您不能这样做,因为模型是不知道请求的。此外,管理命令甚至没有用户。这些模型没有关联,您仍然可以这样做吗?是的,只需导入您需要的模型,您就可以从中引用它们anywhere@Gunnit模型之间没有关联,你还能这样做吗?是的,只要导入你需要的模型,你就可以从中引用它们anywhere@Gunnit请求不能在model.py上使用,或者我不知道如何在model.py上使用它大写是我将更正的类型,谢谢你的请求不能在model.py上使用,或者我不知道如何在model.py上使用它。大写是一种我会更正的类型,谢谢你的回答谢谢,但不知道怎么做,如果我在模型页面上使用request,我会在admin类中使用errorrequest对象,该类在admin.py或api视图中使用,或者在views.py中创建函数,例如:@api_view([“POST”])def test_api(request):variable=Variables()variable.user_var_id=request.user.id variable.save(),谢谢您的回答,但不知道该怎么做,如果我在models页面上使用request,我会在admin类中使用get errorrequest对象,该类在admin.py或api视图中使用,或者在views.py中创建的函数中使用,例如:@api_view([“POST”])def test_api(request):variable=Variables()variable.user_var_id=request.user.id variable.save()ModuleNotFoundError:没有名为“crequest”的模块-我如何在模型中使用它ModuleNotFoundError:没有名为“crequest”的模块-我如何在模型中使用它