2012-01-12 14 views
0

したがって、私はmodelformsetファクトリで使用するmodelformを持っています。変更がデータベースに保存されている、私はfieldsに別のフィールド、extensionを追加した場合、Django Model Formsetでフィールドを追加すると、別のフィールドにIntegrityErrorが発生する

class CheckinForm(ModelForm): 

class Meta: 
    model = Checkout 
    fields = ('return_date',) 


def __init__(self, *args, **kwargs): 
    super(CheckinForm, self).__init__(*args, **kwargs) 
    self.fields['return_date'].widget = CheckboxInput() 

私は(1048, "Column 'book_id' cannot be null")を得るが、私はこのようなフォームクラスを残す場合は

は、私はエラーを受け取りません。ここで

は私のモデルである:

class Checkout(models.Model): 
book = models.ForeignKey(Book) 
user = models.ForeignKey(User) 
checkout_date = models.DateField(auto_now_add = True) 
return_date = models.DateField(null = True, blank=True) 
extension = models.IntegerField("Extension in days", blank = True, default = 0) 

、ここでは、フォームを処理図である。

def checkin(request): 
c = RequestContext(request, dictionary) 
CheckinFormSet = modelformset_factory(Checkout, CheckinForm) 
if request.method == "POST": 
    data = request.POST.copy() 
    for i in range(0, int(data['form-TOTAL_FORMS'])): 
     if 'form-' + str(i) + '-return_date' in data: 
      data['form-' + str(i) + '-return_date'] = datetime.date.today().isoformat() 
     else: 
      data['form-' + str(i) + '-return_date'] = '' 

    formset = CheckinFormSet(data = data) 
    user_form = AutoUserForm(data = data) 
    if formset.is_valid(): 
     c['cool'] = 'cool' 
     formset.save() 
    else: 
     c['err'] = formset.errors 
     c['data'] = data 
else: 
    CheckinFormSet = modelformset_factory(Checkout, CheckinForm) 
    user_form = AutoUserForm() 
c['user_form'] = user_form 
c['form'] = CheckinFormSet 
c['context'] = 'checkin' 
return render_to_response('lib_admin/checkin.html', {}, c) 

return_dateフィールドのために、私はちょうど持っているので、私は、フォームデータを通過する必要がありますチェックボックスをオンにすると、現在の日付が挿入されます。

これは本当に変わっているようです。特に、IntegrityErrorを受け取ってもデータが保存されるためです。

答えて

1

blank=Trueと一緒にdefaultを使用することはお勧めできません。それは値(デフォルト)か否か(空白)のどちらかを持ちますが、同時に両方ではありません。

ソリューション:それを固定

extension = models.IntegerField("Extension in days", default=0) 
+0

。それでも、IntegrityErrorが別のフィールドにスローされるのは非常に奇妙です。どうもありがとう。 – Cronco

関連する問題