将模型 DecimalField 更改为 Charfiled,现在 form.is_valid() 在 Django 1.8 中传递 false
changed model DecimalField to Charfiled,and now form.is_valid() pass false in Django 1.8
我用两个 DecimalFields
创建了一个表单,它工作正常。接下来,我想在我的视图中放置一个组合框。所以,我把一个DecimalField
改成了CharField
。
我删除了所有迁移文件并重新运行 migrate
命令。现在,景色还可以。但是,当我 select 一些值并提交表单时 returns 表单无效错误。
models.py
PRODUCTS = (
(0, 'Pedia Pro 250grm Pack'),
(1, 'Pedia Pro 400grm Pack'),
(2, 'Analene 400grm Pack'),
(3, 'Analene 750grm Pack'),
(4, 'Anchor 1 kg pack'),
(5, 'Analene 750grm Pcak'),
(6, 'Magarin '),
(7, 'Magarin 500grm Pack'),
(8, 'Anmun'),
(9, 'Pedia 100grm Pack'),
)
@python_2_unicode_compatible
class Key_Gen(models.Model):
#key_beging_code =models.DecimalField('Brand_name +Pack_size' ,max_digits=5, decimal_places=2)
key_beging_code =models.CharField("Product ",max_length=3, choices=PRODUCTS)
key_quantity =models.DecimalField("key Quantity" ,max_digits=19, decimal_places=10)
key_code =models.CharField('key Code' ,max_length=50 , unique=True)
is_public = models.BooleanField('public', default=True)
date_created = models.DateTimeField('date created',auto_now_add=True)
date_updated = models.DateTimeField('date updated',auto_now_add=True)
class Meta:
verbose_name='key_Gen'
verbose_name_plural='keys_Gen'
ordering = ['-date_created']
def __str__(self):
return '%s' % (self.key_code)
def adddate(self, *args, **kwargs):
if not self.id:
self.date_created = now()
self.date_updated = now
def save(self, *args, **kwargs):
if not self.key_code:
self.key_code_temp =self.get_key_code(int(self.key_beging_code),int(self.key_quantity))
forms.py
#define form
class KeyGenarateForm(ModelForm):
class Meta:
model = Key_Gen
fields = ['key_beging_code', 'key_quantity']
exclude = ('key_code','date_created', 'date_updated')
views.py
@login_required
def key_create(request):
if request.method == 'POST':
form = KeyGenarateForm(data=request.POST)
print(form)
if form.is_valid():
#request.POST._mutable = True
Key_Gen = form.save(commit=False)
Key_Gen.save()
return redirect('marcador_bookmark_user',username=request.user.username)
else:
print('form not valied')
else:
form = KeyGenarateForm()
#print(form)
context = {'form': form, 'create_key': True}
return render(request, 'marcador/key_genarate_form.html', context)
我认为你的整数和字符不匹配。
如果您的字段是 CharField,则选择 char(每个元组中的第一个元素),而不是 int(例如“0”而不是 0 或使用字母)。
或者,将其更改为 IntegerField。
顺便说一句。您不需要在表单中同时排除这两个字段。
我用两个 DecimalFields
创建了一个表单,它工作正常。接下来,我想在我的视图中放置一个组合框。所以,我把一个DecimalField
改成了CharField
。
我删除了所有迁移文件并重新运行 migrate
命令。现在,景色还可以。但是,当我 select 一些值并提交表单时 returns 表单无效错误。
models.py
PRODUCTS = (
(0, 'Pedia Pro 250grm Pack'),
(1, 'Pedia Pro 400grm Pack'),
(2, 'Analene 400grm Pack'),
(3, 'Analene 750grm Pack'),
(4, 'Anchor 1 kg pack'),
(5, 'Analene 750grm Pcak'),
(6, 'Magarin '),
(7, 'Magarin 500grm Pack'),
(8, 'Anmun'),
(9, 'Pedia 100grm Pack'),
)
@python_2_unicode_compatible
class Key_Gen(models.Model):
#key_beging_code =models.DecimalField('Brand_name +Pack_size' ,max_digits=5, decimal_places=2)
key_beging_code =models.CharField("Product ",max_length=3, choices=PRODUCTS)
key_quantity =models.DecimalField("key Quantity" ,max_digits=19, decimal_places=10)
key_code =models.CharField('key Code' ,max_length=50 , unique=True)
is_public = models.BooleanField('public', default=True)
date_created = models.DateTimeField('date created',auto_now_add=True)
date_updated = models.DateTimeField('date updated',auto_now_add=True)
class Meta:
verbose_name='key_Gen'
verbose_name_plural='keys_Gen'
ordering = ['-date_created']
def __str__(self):
return '%s' % (self.key_code)
def adddate(self, *args, **kwargs):
if not self.id:
self.date_created = now()
self.date_updated = now
def save(self, *args, **kwargs):
if not self.key_code:
self.key_code_temp =self.get_key_code(int(self.key_beging_code),int(self.key_quantity))
forms.py
#define form
class KeyGenarateForm(ModelForm):
class Meta:
model = Key_Gen
fields = ['key_beging_code', 'key_quantity']
exclude = ('key_code','date_created', 'date_updated')
views.py
@login_required
def key_create(request):
if request.method == 'POST':
form = KeyGenarateForm(data=request.POST)
print(form)
if form.is_valid():
#request.POST._mutable = True
Key_Gen = form.save(commit=False)
Key_Gen.save()
return redirect('marcador_bookmark_user',username=request.user.username)
else:
print('form not valied')
else:
form = KeyGenarateForm()
#print(form)
context = {'form': form, 'create_key': True}
return render(request, 'marcador/key_genarate_form.html', context)
我认为你的整数和字符不匹配。
如果您的字段是 CharField,则选择 char(每个元组中的第一个元素),而不是 int(例如“0”而不是 0 或使用字母)。
或者,将其更改为 IntegerField。
顺便说一句。您不需要在表单中同时排除这两个字段。