[英]form.is_valid() always returning false
模型類
class Fuzz_Engine(models.Model):
id = PositiveTinyIntField(primary_key = True)
engine_name = models.CharField(max_length=16)
version = models.CharField(max_length = 16)
class Meta:
db_table = 'fuzz_engine'
unique_together = ('engine_name', 'version')
class AddFuzzEngineForm(ModelForm):
class Meta:
model = Fuzz_Engine
查看課程
def addengine(request)
if request.method == 'POST':
form = AddFuzzEngineForm(request.POST)
# input validation for add phone model form
if form.is_valid():
fuzzEngineToAdd = Fuzz_Engine (engine_name = request.POST['engine_name'], version = request.POST['version'])
fuzzEngineToAdd.save(force_insert=True)
return render_to_response('fuzz/fuzz_cengine_results.html', {'fid': fuzzEngineToAdd.id,'fe': fuzzEngineToAdd,},context_instance=RequestContext(request))
else:
form = AddFuzzEngineForm()
return render_to_response('fuzz/add_fuzz_engine.html', {'form': form},context_instance=RequestContext(request))
我研究了有關此問題的一些類似問題,試圖打印出錯誤,但似乎沒有出現。
Django Formsets-form.is_valid()為False防止 表單集 驗證 form.is_valid()始終返回false
我感覺錯誤的原因在於我的模型表單類的結構。
.is_valid為false,因為我在if語句中放置了一個代碼,但該代碼無法運行,但是如果我有else語句(此處不存在),則它會無效。
任何人都可以提供另一種調試此類錯誤的方法嗎?
幾個問題,如果您粘貼的代碼格式不正確,則很難調試代碼。 壓痕是一團糟,所以我不確定這是否引起問題。
似乎您正在為模型手動分配外鍵。 我建議只是讓Django處理模型的ID:
class Fuzz_Engine(models.Model):
engine_name = models.CharField(max_length=16)
version = models.CharField(max_length = 16)
class Meta:
db_table = 'fuzz_engine'
unique_together = ('engine_name', 'version')
您的表格看起來不錯:
class AddFuzzEngineForm(ModelForm):
class Meta:
model = Fuzz_Engine
我認為您認為一些問題包括:
您可以直接保存表單,因為它是ModelForm。 如果您需要剛創建的實例(即save方法返回的實例),則可以設置一個變量並使用它,如下所示。
def addengine(request) if request.method == 'POST': form = AddFuzzEngineForm(request.POST) if form.is_valid(): instance = form.save() return render_to_response('fuzz/fuzz_cengine_results.html', {'fid': instance.id,'fe': instance,},context_instance=RequestContext(request)) else: form = AddFuzzEngineForm() return render_to_response('fuzz/add_fuzz_engine.html', {'form': form},context_instance=RequestContext(request))
使用原始視圖,您似乎正在嘗試保存一個沒有id
的Fuzz_Engine實例。
DTing有很多優點,但是我懷疑您的實際問題與您對模型中id
字段的明確定義有關。 除非你有一個很好的理由,你不應該這樣做- Django的自動定義的自動增量領域,很少有覆蓋這個,除非你使用的是不能改變的傳統數據庫的任何一點。
在您的情況下,您已將其定義為沒有自動增量的tinyint。 這意味着該字段將以任何形式都需要,因為每次創建新實例時都需要手動指定該字段。 您尚未顯示用於顯示表單的模板,因此無法確定,但是我想您根本不會顯示此字段。
如果您真的想繼續這樣做,則需要在Meta
表單上指定exclude = ('id',)
。 然后在您的is_valid子句中,采納DTing的建議,您需要執行以下操作:
if form.is_valid():
instance = form.save(commit=False)
instance.id = some_function_for_calculating_id()
instance.save()
但是正如我所說,您根本不應該這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.