0

我正在尝试在 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 元素的名称与模型的名称不同。例如,date submittedhtml 中没有字段。这实际上是在数据库中生成并保存的时间戳。

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

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

基本上我使用表单类来简化验证,我没有使用表单作为它的 html 输出,我完全不理会它。

4

2 回答 2

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)
于 2012-12-26T00:09:38.850 回答
0

您不应该ModelForm为此使用 a 。使用 normal Form,在视图或方法中创建一个新的模型实例,复制值,然后返回模型实例。

于 2012-12-26T00:10:42.287 回答