基于Django类的通用视图“CreateView”表单错误处理

时间:2017-06-06 18:28:27

标签: python django django-models django-forms django-class-based-views

我是CBV的新手,我正在尝试使用通用视图public void onBackPressed(){ finish(); } 并理解它。

models.py 中,我有这个型号:

CreateView

该模型使用class CartConfig(models.Model): cart_key = models.CharField( 'Chave do Carrinho', max_length=40, db_index=True ) PAYMENT_OPTION_CHOICES = ( ('cash', 'Dinheiro'), ... ) payment_option = models.CharField( 'Opção de Pagamento', choices=PAYMENT_OPTION_CHOICES, max_length=20, default='cash' ) address = models.ForeignKey(Address, verbose_name='Endereço de entrega', blank="false" ) class Meta: verbose_name = 'Configuração do carrinho' verbose_name_plural = 'Configurações do carrinho' def __str__(self): return 'Cart configs for {}'.format(self.cart_key) ForeignKey,这也是Address模型中的ManyToMany字段。 所以,在我的 views.py 中,我编辑了'adress'字段的查询集,只处理与当前User相关的地址:

User

在我的模板中,它工作正常,显示正确的地址列表并通过帖子表单创建它。但是,如果用户没有选择地址,则会触发预期的错误class CartConfigView(CreateView): model = CartConfig template_name = 'checkout/cart_config.html' fields = ['address','payment_option'] success_url = reverse_lazy('index') def get_context_data(self, **kwargs): context = super(CartConfigView, self).get_context_data(**kwargs) context['form'].fields['address'].queryset = get_object_or_404(User, pk=self.request.user.pk).address.all() context['form'].fields['address'].empty_label = None return context 。问题是,NOT NULL constraint failed: checkout_cartconfig.address_id不应该处理此错误吗?我究竟做错了什么?如何使用CreateView对页面进行刷新,以向用户显示“必填字段”消息?

1 个答案:

答案 0 :(得分:1)

blank="false"未正确设置您的模型。它需要是一个布尔值。

address = models.ForeignKey(
    Address,
    verbose_name='Endereço de entrega',
    blank=False
)

关于Python的有趣事实:当解析为布尔值时,字符串计算为true。

>>> bool("false")
True