Je suis nouveau à CBV et essaie d'utiliser la vue générique CreateView
et le comprendre.classe Django vue générique sur la base « createView » forme la gestion des erreurs
En models.py J'ai ce modèle:
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)
Ce modèle utilise un ForeignKey
-Address
, qui est aussi un champ ManyToMany
dans le modèle User
. Donc, dans mon views.py J'ai effectué le queryset de champ'adress' pour traiter uniquement l'adresse relationed à la User
actuelle:
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
Dans mon modèle, il fonctionne très bien, montrer la liste d'adresses à droite et créez-le aussi à travers le formulaire de publication. Mais si l'utilisateur ne sélectionne pas une adresse, il déclenche l'erreur attendue NOT NULL constraint failed: checkout_cartconfig.address_id
. La question est, ne devrait pas le CreateView
gère cette erreur? Qu'est-ce que je fais mal? Comment puis-je faire pour rafraîchir la page avec le field.errors
pour montrer à l'utilisateur le message "champ requis"?
blanc doit être un booléen 'blank = False'. Peut-être que la chaîne "false" est résolue à la vérité et n'ajoute pas la balise 'required' à l'entrée de formulaire dans le code HTML. – Brobin
@Brobin ouais, honte pour cette erreur hahah = (, merci u pour la réponse! –