我是CBV的新手,我試圖使用通用視圖CreateView
並理解它。基於Django類的通用視圖「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)
該模型採用了ForeignKey
到Address
,這也是在User
模型ManyToMany
場。 所以,在我views.py我編輯'adress'字段的查詢集處理只有relationed到當前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應該是一個布爾型的'blank = False'。也許字符串「false」解決了truthy問題,而不是在html中的表單輸入中添加'required'標籤。 – Brobin
@Brobin是的,爲這個錯誤感到羞恥hahah =(,謝謝你的回覆! –