1

我对 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')  
    ..

表格.py:

class OrderForm(forms.ModelForm):
    class Meta:
        model = Order
        fields = ('suspend_time', 'processed')

视图.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"参数更新实例。如果我不发送 如果请求包含我
form.is_valid总是 不明白为什么?有默认值..和顺序。总是有一些或其他的选择。 为什么在is之后,其他字段 都有正常值。 False"suspend_time" !
{'suspend_time': 'some_value' ...} form.is_validTrue
suspend_timesuspend_timevalue: default
form = OrderForm(request.POST, instance=order) form['suspend_time'].value()None(city, processed)

4

1 回答 1

1

行为符合预期。表单应使用给定的数据进行验证。即在表单中定义的任何必填字段都应存在于数据字典中以对其进行实例化。它不会使用来自实例的数据来填充表单数据中未提供的字段。

来自django 模型表单的文本

如果您正在构建一个数据库驱动的应用程序,那么您很可能拥有与 Django 模型紧密映射的表单。例如,您可能有一个 BlogComment 模型,并且您想创建一个允许人们提交评论的表单。在这种情况下,在表单中定义字段类型是多余的,因为您已经在模型中定义了字段。

出于这个原因,Django 提供了一个帮助类,让您可以从 Django 模型创建一个 Form 类。

于 2012-11-01T16:20:29.100 回答