窗体类内部Django字段的设置值
我试图在Form类中设置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
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
验证数据后获取数据,这是为什么?我与一个模型有着密切的联系,所以我想我应该使用一个ModelFormAModelForm
从模型中获取字段名。既然这不是你想要的,你就不应该使用它。为什么呢?我与一个模型有着密切的联系,所以我想我应该使用一个ModelFormAModelForm
从模型中获取字段名。因为这不是您想要的,所以不应该使用它。