Proper INET and CIDR fields for Django running on PostgreSQL

Thomas Adamcik 552c1b582c Get operators for postgres no matter what db we are running 14 years ago
netfields 552c1b582c Get operators for postgres no matter what db we are running 13 years ago
tests 552c1b582c Get operators for postgres no matter what db we are running 13 years ago
.gitignore cc47535ebc Add gitignore 15 years ago
AUTHORS 3f795d6d05 Add project files 15 years ago
LICENSE 3f795d6d05 Add project files 15 years ago
README.rst c9685bffad Update README 14 years ago

README.rst

Django PostgreSQL Netfields
===========================

This project is an attempt at making proper Django net related fields for
Django Currently the built in ``IPAddressField`` does not support IPv6 and uses
an inefficient ``HOST()`` cast in all lookups. Hopefully there experience from
this project can lead to a resolution of these issues upstream.

In addition to the basic ``IPAddressField`` replacement a ``CIDR`` and
``MACADDR`` field have been added. Furthermore a customer Manager allows for
access to all of PostgreSQL's INET operators.

Dependencies
------------

Current version of code is targeting Django 1.2 support, as this relies heavily
on ORM internals supporting multiple versions is especially tricky. ``IPy`` is
used for the same reasons. ``ipaddr`` is being considered, but the conversion
hinges on the related projects conversion to ``ipaddr``.

Getting started
---------------

Make sure ``netfields`` is in your ``PYTHONPATH``, then simply use the
following::

from netfields import InetAddressField, NetManager

class Example(models.Model):
inet = InetAddressField()
# ...

objects = NetManager()

The page also provides ``CidrAddressField`` and a ``MACAddressField``.
``NetManager`` is required for the extra lookups to be available. Lookups for
``INET`` and ``CIDR`` database types will be handled differently than when
running vanilla Django. All lookups are case-insensitive and text based
lookups are avoided whenever possible. In addition to Django's default lookup
types the following have been added.

* ``__net_contained``
* ``__net_contained_or_equal``
* ``__net_contains``
* ``__net_contains_or_equals``

These correspond with the operators from
http://www.postgresql.org/docs/8.3/interactive/functions-net.html

``netfields`` does not have to be in ``INSTALLED_APPS``.

Related Django bugs
-------------------

* 11442_ - Postgresql backend casts inet types to text, breaks IP operations and IPv6 lookups.
* 811_ - IPv6 address field support.

.. _11442: http://code.djangoproject.com/ticket/11442
.. _811: http://code.djangoproject.com/ticket/811