Read the documentation

hCaptchahcaptcha

Independent alternative with the same siteverify protocol. Rendered through CaptchaField("hcaptcha"), like any other form field.

The code

class ContactForm(forms.Form):
        name = forms.CharField(max_length=100)
        email = forms.EmailField()
        message = forms.CharField(widget=forms.Textarea)
        captcha = CaptchaField("hcaptcha")

The POST field this widget submits is named by the service, not by the form. Look at the request payload: the value arrives under hcaptcha's own field name, and the widget finds it anyway.

See the same provider through the template tag · hCaptcha docs