Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.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字段的设置值_Django - Fatal编程技术网

窗体类内部Django字段的设置值

窗体类内部Django字段的设置值,django,Django,我试图在Form类中设置Django字段的值。这是我的模型 class Workout(models.Model): user = models.ForeignKey(User , db_column='userid') datesubmitted = models.DateField() workoutdate = models.DateField(); bodyweight = models.FloatField(null=True); work

我试图在Form类中设置Django字段的值。这是我的模型

class Workout(models.Model):
    user = models.ForeignKey(User , db_column='userid')

    datesubmitted = models.DateField() 
    workoutdate = models.DateField(); 
    bodyweight = models.FloatField(null=True);
    workoutname = models.CharField(max_length=250)
下面是form类,我正试图在其中实现这一点:

class WorkoutForm(forms.ModelForm):

    class Meta: 
        model = Workout

    def __init__(self,*args, **kwargs):
        # this is obviously wrong, I don't know what variable to set self.data to
        self.datesubmitted = self.data['datesubmitted']
好吧,对不起,伙计们。我正在传递
请求。将
数据发布到我视图中的
WorkoutForm

w = WorkoutForm(request.POST)
然而,不幸的是,html元素的名称与模型的名称不同。例如,html中没有提交日期字段。这实际上是一个生成并保存在数据库中的时间戳

所以我需要能够以某种方式将它保存在表单类中

这就是为什么我试图将
datesubmitted
字段设置为
datetime.datetime.now()


基本上,我使用form类来简化验证,而不是将form用于html输出,我完全忽略了这一点。

您必须在表单的
save
方法中执行此操作

class WorkoutForm(forms.ModelForm):

    class Meta: 
        model = Workout

    def __init__(self,*args, **kwargs):
        super(WorkoutForm, self).__init__(*args, **kwargs)

    def save(self, *args, **kw):
        instance = super(WorkoutForm, self).save(commit=False)
        instance.datesubmitted = datetime.now()
        instance.save()
如何在模型中设置该值,以便在创建新对象时保存当前日期时间:

datesubmitted = models.DateTimeField(auto_now_add=True)
您可以将表单中设置的一些额外值设置为:

form = WorkOutForm(curr_datetime = datetime.datetime.now(), request.POST) # passing datetime as a keyword argument
然后在表单中获取并设置它:

def __init__(self,*args, **kwargs):
    self.curr_datetime = kwargs.pop('curr_datetime')
    super(WorkoutForm, self).__init__(*args, **kwargs)

您必须在表单的
save
方法中执行此操作

class WorkoutForm(forms.ModelForm):

    class Meta: 
        model = Workout

    def __init__(self,*args, **kwargs):
        super(WorkoutForm, self).__init__(*args, **kwargs)

    def save(self, *args, **kw):
        instance = super(WorkoutForm, self).save(commit=False)
        instance.datesubmitted = datetime.now()
        instance.save()
如何在模型中设置该值,以便在创建新对象时保存当前日期时间:

datesubmitted = models.DateTimeField(auto_now_add=True)
您可以将表单中设置的一些额外值设置为:

form = WorkOutForm(curr_datetime = datetime.datetime.now(), request.POST) # passing datetime as a keyword argument
然后在表单中获取并设置它:

def __init__(self,*args, **kwargs):
    self.curr_datetime = kwargs.pop('curr_datetime')
    super(WorkoutForm, self).__init__(*args, **kwargs)


您不应该为此使用
ModelForm
。使用普通的
表单
,在视图或方法中创建新的模型实例,复制值,然后返回模型实例。

您不应该为此使用
模型表单
。使用普通的
表单
,在视图或方法中创建新的模型实例,复制值,然后返回模型实例。

。。。你想做什么?你想得到发布的数据吗?我添加了更多信息你的表单是一个
ModelForm
html元素如何有不同的名称?所以。。。你想做什么?你想获取发布的数据吗?我添加了更多信息你的表单是一个
ModelForm
html元素如何具有不同的名称?现在,对于任意表单中的其他任意值,我必须先验证所有这些数据,然后才能调用save方法correct?我是否需要完全重新定义is_valid()方法来将这些任意值分配给任意形式?模型将自行验证字段。e、 g.如果您有一个字段
a
,并且它是必填字段,那么如果您将其留空,表单将引发
ValidationError
。是否有任何方法可以全局分配该值,例如在init方法中?datesubmitted=self.data['datesubmitted']会起作用吗?这不就是您访问请求的方式吗?将数据传递到表单中?我在最后更新了答案检查。您应该在使用
self.cleaned_data
验证数据之后获取数据。现在,对于任意形式的其他任意值,我必须验证所有这些数据,然后才能调用save方法correct?我是否需要完全重新定义is_valid()方法来将这些任意值分配给任意形式?模型将自行验证字段。e、 g.如果您有一个字段
a
,并且它是必填字段,那么如果您将其留空,表单将引发
ValidationError
。是否有任何方法可以全局分配该值,例如在init方法中?datesubmitted=self.data['datesubmitted']会起作用吗?这不就是您访问请求的方式吗?将数据传递到表单中?我在最后更新了答案检查。您应该在使用
self.cleaned\u data
验证数据后获取数据,这是为什么?我与一个模型有着密切的联系,所以我想我应该使用一个ModelFormA
ModelForm
从模型中获取字段名。既然这不是你想要的,你就不应该使用它。为什么呢?我与一个模型有着密切的联系,所以我想我应该使用一个ModelFormA
ModelForm
从模型中获取字段名。因为这不是您想要的,所以不应该使用它。