Install & Compatibility
Where this runs
tested against v1.4.1 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
muslpy 3.10–3.920 runs
installs and imports cleanly · install 0.0s · import 0.000s · 76.2MB
glibcpy 3.10–3.920 runs
installs and imports cleanly · install 3.6s · import 0.000s · 77MB
75MB installed
● package 75MB
Code
Verified usage
Verified import paths — ran on the pinned version, not inferred.
InetAddressField
✓ from netfields import InetAddressField
✗ from netfields import InetAddressField
CidrAddressField
✓ from netfields import CidrAddressField
MACAddressField
✓ from netfields import MACAddressField
This quickstart demonstrates defining a model with `InetAddressField`, `CidrAddressField`, and `MACAddressField`. It highlights the use of `NetManager` for advanced queries and shows how to create and retrieve objects using `ipaddress` and `netaddr` types.
import os
import django
from django.conf import settings
from django.db import models
from netfields import InetAddressField, CidrAddressField, MACAddressField, NetManager
import ipaddress
import netaddr
# Minimal Django setup for standalone script
if not settings.configured:
settings.configure(
INSTALLED_APPS=['netfields'],
DATABASES={'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:'}},
DEBUG=True
)
django.setup()
class NetworkDevice(models.Model):
name = models.CharField(max_length=100)
ip_address = InetAddressField(unique=True)
network = CidrAddressField(blank=True, null=True)
mac_address = MACAddressField(blank=True, null=True)
objects = NetManager()
def __str__(self):
return f"{self.name} - {self.ip_address}"
# Create database schema (in-memory for example)
with django.test.utils.override_settings(MIGRATION_MODULES={'netfields': None}):
from django.core.management import call_command
call_command('makemigrations', 'netfields', interactive=False, verbosity=0)
call_command('migrate', interactive=False, verbosity=0)
# Usage examples
# Create instances with ipaddress/netaddr objects
device1 = NetworkDevice.objects.create(
name='Router1',
ip_address=ipaddress.ip_interface('192.168.1.1/24'),
network=ipaddress.ip_network('192.168.1.0/24'),
mac_address=netaddr.EUI('00:11:22:AA:BB:CC')
)
device2 = NetworkDevice.objects.create(
name='Server1',
ip_address=ipaddress.ip_address('192.168.1.100'),
network=ipaddress.ip_network('192.168.1.0/24')
)
# Retrieve and query
print(f"Device 1: {device1}")
print(f"Device 2: {device2}")
# Lookup using NetManager's custom lookups
# Find devices within a network
subnet_devices = NetworkDevice.objects.filter(ip_address__net_contained_or_equal='192.168.1.0/24')
print(f"\nDevices in 192.168.1.0/24: {list(subnet_devices)}")
# Find networks that contain a specific IP
containing_networks = NetworkDevice.objects.filter(network__net_contains='192.168.1.50')
print(f"Networks containing 192.168.1.50: {list(containing_networks)}")
# Update an instance
device1.ip_address = ipaddress.ip_interface('10.0.0.1/8')
device1.save()
print(f"Updated Device 1 IP: {device1.ip_address}")
Upgrade
Version history
1.4.1latest on PyPI · released Mar 5, 2026
Audit
Dependencies
DjangorequiredRequired for Django ORM integration. Minimum Django >= 1.11.
psycopg2requiredPostgreSQL adapter for Python, required for database interaction. `psycopg` is also supported.
netaddrrequiredUsed internally for MAC address field representations (EUI types).