---
title: "API des formulaires GeoDjango"
version: 6.1
locale: fr
source: https://docs.djangoproject.com/fr/6.1/ref/contrib/gis/forms-api/
canonical: https://djangodocs.dev/fr/6.1/ref/contrib/gis/forms-api/
---
# API des formulaires GeoDjango

GeoDjango propose quelques champs et composants de formulaires spécialisés afin d’afficher et de modifier visuellement des données géolocalisées sur une carte. Par défaut, ils utilisent des cartes motorisées par [OpenLayers](https://openlayers.org/), avec une couche de base WMS fournie par la [NASA](https://www.earthdata.nasa.gov/).

## Paramètres de champs

En plus des [paramètres de champs de formulaires](/fr/6.1/ref/forms/fields/#core-field-arguments) habituels, les champs de formulaires GeoDjango acceptent les paramètres facultatifs suivants.

### `srid`

#### `Field.srid`

Il s’agit du code SRID utilisé pour transformer la valeur du champ. Par exemple, si le SRID du composant de carte est différent du SRID utilisé plus généralement par votre application ou base de données, le champ convertit automatiquement les valeurs d’entrée dans ce SRID.

### `geom_type`

#### `Field.geom_type`

Cet attribut n’a généralement pas besoin d’être défini ou modifié, car il est automatiquement défini en fonction de la classe du champ. Il correspond au nom d’objet géométrique du standard OpenGIS.

### `max_geom_collections`

#### `Field.max_geom_collections`

> **New in Django 5.2.17**

The maximum number of geometry collections the field accepts before
refusing to parse the input and raising a
[`ValidationError`](/fr/6.1/ref/exceptions/#django.core.exceptions.ValidationError). This guards against crashes
in the underlying GEOS library when parsing deeply nested
`GEOMETRYCOLLECTION` input. It defaults to `198`.

The limit is applied differently depending on the input format: for
well-known text (WKT) it bounds the nesting *depth*, while for well-known
binary (WKB and hex-encoded WKB) it bounds the *total* number of geometry
collections (both breadth and depth). As a result, the same value may
accept a wide, shallow collection as WKT but reject it as WKB. For GeoJSON,
the limit is not applied at all, since GDAL parses that input type instead.

Increase this value (or set to `None`) only if you must accept
legitimately deep geometries, since doing so reduces protection against
fatal errors.

## Classes de champs de formulaires

### `GeometryField`

#### `class GeometryField`

### `PointField`

#### `class PointField`

### `LineStringField`

#### `class LineStringField`

### `PolygonField`

#### `class PolygonField`

### `MultiPointField`

#### `class MultiPointField`

### `MultiLineStringField`

#### `class MultiLineStringField`

### `MultiPolygonField`

#### `class MultiPolygonField`

### `GeometryCollectionField`

#### `class GeometryCollectionField`

## Composants de formulaires

Les composants de formulaires GeoDjango permettent d’afficher et de modifier des données géographiques visuellement sur une carte. Notez qu’aucun des composants actuellement disponibles ne prend en charge les objets géométriques 3D, ce qui fait que les champs géométriques se rabattent sur un composant `Textarea` s’ils ont affaire à de tels objets.

### Attributs de composants

Les composants GeoDjango sont basés sur les gabarits, ce qui fait que leurs attributs sont majoritairement différents des autres attributs de composants Django.

#### `BaseGeometryWidget.base_layer`

> **New in Django 6.0**

Une chaîne indiquant l’identifiant de la couche cartographique de base par défaut à utiliser par le composant de carte JavaScript correspondant. Elle est transmise dans les options du composant au moment du rendu, permettant à `MapWidget` de déterminer quel fournisseur de tuiles de carte ou de couche de base à initialiser (vaut `None` par défaut).

#### `BaseGeometryWidget.geom_type`

Le type de géométrie OpenGIS, généralement défini par le champ de formulaire.

#### `BaseGeometryWidget.map_srid`

Code SRID utilisé par la carte (la valeur par défaut est 4326).

#### `BaseGeometryWidget.display_raw`

Valeur booléenne indiquant si une boîte de saisie de texte affichant la représentation sérialisée de l’objet géométrique en cours est visible, principalement à des fins de débogage (la valeur par défaut est `False`).

#### `BaseGeometryWidget.supports_3d`

Indique si le composant prend en charge l’édition de données 3D (la valeur par défaut est `False`).

#### `BaseGeometryWidget.template_name`

Le gabarit utilisé pour produire le composant de carte.

Vous pouvez transmettre des attributs de composants de la même façon que pour tout autre composant Django. Par exemple :

```
from django.contrib.gis import forms

class MyGeoForm(forms.Form):
    point = forms.PointField(widget=forms.OSMWidget(attrs={"display_raw": True}))
```

### Classes de composants

`BaseGeometryWidget`

#### `class BaseGeometryWidget`

Il s’agit d’un composant de base abstrait contenant la logique nécessaire aux sous-classes. Il n’est pas possible d’utiliser directement ce composant pour un champ géométrique. Notez que la production de composants GeoDjango est basée sur un nom de couche de base, identifié par l’attribut de classe [`base_layer`](#django.contrib.gis.forms.widgets.BaseGeometryWidget.base_layer).

`OpenLayersWidget`

#### `class OpenLayersWidget`

Il s’agit du composant par défaut utilisé par tous les champs de formulaires GeoDjango. Ses attributs sont :

#### `base_layer`

> **New in Django 6.0**

`nasaWorldview`

#### `template_name`

`gis/openlayers.html`.

#### `map_srid`

`3857`

`OpenLayersWidget` et [`OSMWidget`](#django.contrib.gis.forms.widgets.OSMWidget) incluent les fichiers `ol.js` et `ol.css` hébergés sur le réseau de diffusion de contenu `cdn.jsdelivr.net`. Ces fichiers peuvent être surchargés en créant une sous-classe du composant et en définissant les propriétés `js` et `css` de la classe `Media` interne (voir [Fichiers annexes définis statiquement](/fr/6.1/topics/forms/media/#assets-as-a-static-definition)).

> **Fichiers statiques externes avec CSP**
>
> Lorsque [`ContentSecurityPolicyMiddleware`](/fr/6.1/ref/middleware/#django.middleware.csp.ContentSecurityPolicyMiddleware) est activé, les fichiers externes par défaut du CDN OpenLayers (`ol.js` et `ol.css`) seront bloqués, sauf si une clause spécifique les autorise. Cela peut être corrigé de deux manières : **servir ces fichiers localement** en créant une sous-classe du composant et en indiquant des copies locales des fichier JavaScript et CSS, ou **autoriser le CDN dans la politique CSP**.
>
> Par exemple, pour autoriser la couche de base par défaut « NASA Worldview » (remplacez `x.y.z` par la version actuelle) :
>
> ```
> from django.utils.csp import CSP
>
> SECURE_CSP = {
>     "default-src": [CSP.SELF],
>     "script-src": [CSP.SELF, "https://cdn.jsdelivr.net/npm/ol@x.y.z/dist/ol.js"],
>     "style-src": [CSP.SELF, "https://cdn.jsdelivr.net/npm/ol@x.y.z/ol.css"],
>     "img-src": [CSP.SELF, "https://*.earthdata.nasa.gov"],
> }
> ```

`OSMWidget`

#### `class OSMWidget`

Ce composant spécialise [`OpenLayersWidget`](#django.contrib.gis.forms.widgets.OpenLayersWidget) en utilisant une couche de base OpenStreetMap pour afficher les objets géographiques. Ses attributs sont :

#### `base_layer`

> **New in Django 6.0**

`osm`

#### `default_lat`

#### `default_lon`

Les latitude et longitude du centre sont respectivement `47` et `5` par défaut, ce qui correspond à un emplacement à l’est de la France.

#### `default_zoom`

Le zoom de carte par défaut est `12`.

La note [`OpenLayersWidget`](#django.contrib.gis.forms.widgets.OpenLayersWidget) au sujet des fichiers statiques externes est aussi valable dans ce cas. Voir aussi cette [réponse de FAQ](https://help.openstreetmap.org/questions/10920/how-to-embed-a-map-in-my-https-site) au sujet de l’accès `https` aux tuiles de cartes.

> **Tuiles OpenStreetMap et CSP**
>
> Ce composant utilise des tuiles OpenStreetMap au lieu de la couche NASA Worldview. Si [Politique de sécurité de contenu (CSP)](/fr/6.1/topics/security/#security-csp) est activé, il est nécessaire d’autoriser à la fois les ressources CDN OpenLayers (tels que requis par [`OpenLayersWidget`](#django.contrib.gis.forms.widgets.OpenLayersWidget)) et les serveurs de tuiles OpenStreetMap :
>
> ```
> from django.utils.csp import CSP
>
> SECURE_CSP = {
>     # other directives
>     "img-src": [CSP.SELF, "https://tile.openstreetmap.org"],
> }
> ```

> **Changed in Django 6.0**
>
> Le composant `OSMWidget` n’utilise plus de gabarit personnalisé. Par conséquent, le gabarit `gis/openlayers-osm.html` a été supprimé.

### Personnalisation de la couche de base utilisée dans les composants basés sur OpenLayers

> **New in Django 6.0**

Pour personnaliser la couche de base affichée dans les composants géométriques basés sur OpenLayers, définissez un nouveau constructeur de couche dans un fichier JavaScript personnalisé. Par exemple :

*`chemin-vers-fichier.js`*

```javascript
 MapWidget.layerBuilder.custom_layer_name = function () {
     // Return an OpenLayers layer instance.
     return new ol.layer.Tile({source: new ol.source.<ChosenSource>()});
 };
```

Puis, créez une sous-classe du composant géométrique standard et définissez l’attribut `base_layer`:

```
from django.contrib.gis.forms.widgets import OpenLayersWidget

class YourCustomWidget(OpenLayersWidget):
    base_layer = "custom_layer_name"

    class Media:
        js = ["path-to-file.js"]
```
