我有django的问题:
models.py:
SUSPEND_TIME = (
('0', '0'),
('10', '10'),
('15', '15'),
('20', '20'),
class Order(models.Model):
user = models.ForeignKey(User)
city = models.CharField(max_length=20)
...
processed = models.BooleanField(default=False)
suspend_time = models.CharField(max_length=2, choices=SUSPEND_TIME, default='0')
..
form.py:
class OrderForm(forms.ModelForm):
class Meta:
model = Order
fields = ('suspend_time', 'processed')
view.py:
try:
order = Order.objects.get(id=order_id)
except Order.DoesNotExist:
order = None
else:
form = OrderForm(request.POST, instance=order)
if form.is_valid():
form.save()
....
然后我发送ajax请求更新实例只有"processed"
param ..
如果我不发送form.is_valid
,False
总是"suspend_time" !
如果请求包含{'suspend_time': 'some_value' ...}
form.is_valid
,则为True
我不明白为什么? suspend_time
有默认值..和订单。suspend_time
总是有一些value: default
或其他选项。
为什么在form = OrderForm(request.POST, instance=order)
form['suspend_time'].value()
为None
之后,其他字段(city, processed)
具有正常值。
答案 0 :(得分:1)
行为符合预期。表单应使用给定的数据进行验证。即,在表单中定义了所需的字段,应该存在于数据字典中以实例化它。 它不会使用实例中的数据来填充表单数据中未提供的字段。
的文字如果您正在构建一个数据库驱动的应用程序,那么您可能会拥有与Django模型紧密相关的表单。例如,您可能有一个BlogComment模型,并且您想要创建一个允许人们提交注释的表单。在这种情况下,在表单中定义字段类型是多余的,因为您已经在模型中定义了字段。
因此,Django提供了一个帮助器类,可以让你从Django模型创建一个Form类。