私はCBVを初めて使用しており、汎用ビューCreateView
を使用しようとしています。モデルはまた、User
モデルでManyToMany
分野である、Address
からForeignKey
を使用していますDjangoクラスベースの汎用ビュー "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)
こと:
models.pyでは、私は、このモデルを持っています。 だから、私のviews.pyに私は、現在のUser
にrelationedアドレスのみを処理するために'adress'フィールドのクエリセットを編集した:私のテンプレートで
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
でページの更新を行うと、「必須フィールド」メッセージが表示されます。
ブランクは、「空白= False」のブール値でなければなりません。おそらく、文字列 "false"は真実に解決され、HTMLのフォーム入力に 'required'タグを追加しないでしょう。 – Brobin
@Brobinええ、この間違いのために恥ずかしいhahah =(、返信のためにuをありがとう! –