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 submitted、htmlにはフィールドがありません。これは事実上、作成されてデータベースに保存されるタイムスタンプです。

ですから、なんとかしてフォームクラス内に保存できるようにする必要があると思います。

そのため、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。通常Formのを使用し、ビューまたはメソッドのいずれかで新しいモデルインスタンスを作成し、値をコピーして、モデルインスタンスを返します。

于 2012-12-26T00:10:42.287 に答える