Plain is headed towards 1.0! Subscribe for development updates →

  1# plain.models
  2
  3**Model your data and store it in a database.**
  4
  5```python
  6# app/users/models.py
  7from plain import models
  8from plain.passwords.models import PasswordField
  9
 10
 11@models.register_model
 12class User(models.Model):
 13    email = models.EmailField()
 14    password = PasswordField()
 15    is_admin = models.BooleanField(default=False)
 16    created_at = models.DateTimeField(auto_now_add=True)
 17
 18    def __str__(self):
 19        return self.email
 20```
 21
 22Create, update, and delete instances of your models:
 23
 24```python
 25from .models import User
 26
 27
 28# Create a new user
 29user = User.objects.create(
 30    email="[email protected]",
 31    password="password",
 32)
 33
 34# Update a user
 35user.email = "[email protected]"
 36user.save()
 37
 38# Delete a user
 39user.delete()
 40
 41# Query for users
 42admin_users = User.objects.filter(is_admin=True)
 43```
 44
 45## Installation
 46
 47Install `plain.models` from PyPI, then add it to your `INSTALLED_PACKAGES`.
 48
 49```python
 50# app/settings.py
 51INSTALLED_PACKAGES = [
 52    ...
 53    "plain.models",
 54]
 55```
 56
 57To connect to a database, you can provide a `DATABASE_URL` environment variable.
 58
 59```sh
 60DATABASE_URL=postgresql://user:password@localhost:5432/dbname
 61```
 62
 63Or you can manually define the `DATABASE` setting.
 64
 65```python
 66# app/settings.py
 67DATABASE = {
 68    "ENGINE": "plain.models.backends.postgresql",
 69    "NAME": "dbname",
 70    "USER": "user",
 71    "PASSWORD": "password",
 72    "HOST": "localhost",
 73    "PORT": "5432",
 74}
 75```
 76
 77Multiple backends are supported, including Postgres, MySQL, and SQLite.
 78
 79## Querying
 80
 81TODO
 82
 83## Migrations
 84
 85TODO
 86
 87## Fields
 88
 89TODO
 90
 91## Validation
 92
 93TODO
 94
 95## Indexes and constraints
 96
 97TODO
 98
 99## Managers
100
101TODO
102
103## Forms
104
105TODO