我正在尝试在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)
这是表单类,我试图在其中实现此目的:
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']
好的,对不起伙计们。我将request.POST
数据传递到我视图中的WorkoutForm
w = WorkoutForm(request.POST)
然而,不幸的是,html元素的名称与模型的名称不同。例如,html中没有date submitted
字段。这实际上是生成并保存在数据库中的时间戳。
所以我需要能够将它保存在表单类中,我认为。
这就是我尝试将datesubmitted
字段设置为datetime.datetime.now()
基本上我使用表单类来使验证更容易,而且我没有使用它的html输出表单,我完全忽略了。
答案 0 :(得分:3)
您必须在表单的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)
答案 1 :(得分:0)
您不应该使用ModelForm
。使用普通Form
,在视图或方法中创建新模型实例,复制值并返回模型实例。