簡體   English   中英

基於Django類的通用視圖“ CreateView”表單錯誤處理

[英]Django class based generic view “CreateView” form errors handling

我是CBV的新手,正在嘗試使用通用視圖CreateView並了解它。

models.py我有這個模型:

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)

該模型使用ForeignKeyAddress ,這也是User模型中的ManyToMany字段。 因此,在我的views.py中,我編輯了“ adress”字段的queryset以僅處理與當前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是否應處理此錯誤? 我究竟做錯了什么? 如何使用field.errors刷新頁面以向用戶顯示“必填字段”消息?

使用blank="false"不能完全正確地設置模型。 它必須是布爾值。

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

關於Python的有趣事實:解析為布爾值時,字符串評估為true。

>>> bool("false")
True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM