2

modelformset_factory を使用して空のフォームを作成していますが、ビューの request.user を created_by フィールドに入力する方法がわかりません。models.Manager を使用して created_by のデフォルト値を処理できることはわかっていますが、現在ログインしているユーザーをビューに直接入力することをお勧めします。管理画面は気にしません。

これは私のmodels.pyです:

from django.db import models
from django.forms import ModelForm
from django.contrib.auth.models import User
import datetime

class ezApp(models.Model):
    name = models.SlugField(max_length=50, )
    date_created = models.DateTimeField('date created', editable=False)
    date_updated = models.DateTimeField('date updated', editable=False)
    created_by = models.ForeignKey(User)

def save(self):
    if not self.id:
        self.date_created = datetime.date.today()
    self.date_updated = datetime.datetime.today()
    super(ezApp, self).save()

class ezForm(ModelForm):
    class Meta:
        model = ezApp
        fields = ('name')

これはviews.py

from django.shortcuts import render_to_response
from ezmapping.models import *
from django.forms.models import modelformset_factory

def setName(request):
    ezAppFormSet = modelformset_factory(ezApp, extra=1, fields=('name'))
    formset = ezAppFormSet(queryset=ezApp.objects.none())
    if request.method == 'POST':
        formset = ezAppFormSet(request.POST, request.FILES)
        if formset.is_valid():
            formset.save()
    return render_to_response("project/manage_new.html", {'formset': formset, 'title': "New"}, context_instance=RequestContext(request))

エラーメッセージ:

project_ezapp.created_by_id を NULL にすることはできません

4

1 に答える 1

1

私はあなたが試すことができると思います:

class BaseEzAppFormSet(BaseModelFormSet):
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        super(BaseEzAppFormSet, self).__init__(*args, **kwargs)

    def save_new(self, form, commit=True):
        obj = form.save(commit=False)
        obj.created_by = self.user
        if commit:
             obj.save()
        return obj
...
ezAppFormSet = modelformset_factory(ezApp, extra=1, fields=('name'), 
    formset=BaseEzAppFormSet)
...
formset = ezAppFormSet(request.POST, request.FILES, user=request.user)
于 2013-02-06T17:19:13.703 に答える