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