Skip to content

Commit a4b6309

Browse files
committed
Replace related_name with explicit reverse descriptors
1 parent f918526 commit a4b6309

File tree

27 files changed

+469
-361
lines changed

27 files changed

+469
-361
lines changed

plain-api/plain/api/README.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class BaseAPIView(APIView, APIKeyView):
3333
def use_api_key(self):
3434
super().use_api_key()
3535

36-
if user := self.api_key.users.first():
36+
if user := User.query.filter(api_key=self.api_key).first():
3737
set_request_user(self.request, user)
3838
else:
3939
raise ResponseException(
@@ -106,11 +106,12 @@ Handling authentication in the API is pretty straightforward. If you use [API ke
106106
```python
107107
class BaseAPIView(APIView, APIKeyView):
108108
def use_api_key(self):
109-
from plain.auth import set_request_user
109+
from plain.auth import get_request_user, set_request_user
110+
from app.users.models import User
110111

111112
super().use_api_key()
112113

113-
if user := self.api_key.users.first():
114+
if user := User.query.filter(api_key=self.api_key).first():
114115
set_request_user(self.request, user)
115116
else:
116117
raise ResponseException(
@@ -216,7 +217,6 @@ class User(models.Model):
216217
api_key = models.ForeignKey(
217218
APIKey,
218219
on_delete=models.CASCADE,
219-
related_name="users",
220220
allow_null=True,
221221
required=False,
222222
)
@@ -246,13 +246,16 @@ To use API keys in your views, you can inherit from `APIKeyView` and customize t
246246
# app/api/views.py
247247
from plain.api.views import APIKeyView, APIView
248248
from plain.auth import set_request_user
249+
from plain.views.exceptions import ResponseException
250+
251+
from app.users.models import User
249252

250253

251254
class BaseAPIView(APIView, APIKeyView):
252255
def use_api_key(self):
253256
super().use_api_key()
254257

255-
if user := self.api_key.users.first():
258+
if user := User.query.filter(api_key=self.api_key).first():
256259
set_request_user(self.request, user)
257260
else:
258261
raise ResponseException(

plain-models/plain/models/backends/base/schema.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ def _all_related_fields(model: type[Model]) -> list[Any]:
6060
model._model_meta._get_fields(
6161
forward=False,
6262
reverse=True,
63-
include_hidden=True,
6463
),
6564
key=operator.attrgetter("name"),
6665
)

plain-models/plain/models/deletion.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ def get_candidate_relations_to_delete(meta: Meta) -> Generator[Any, None, None]:
9595
# N-N (i.e., many-to-many) relations aren't candidates for deletion.
9696
return (
9797
f
98-
for f in meta.get_fields(include_hidden=True)
98+
for f in meta.get_fields(include_reverse=True)
9999
if f.auto_created and not f.concrete and f.one_to_many
100100
)
101101

plain-models/plain/models/fields/__init__.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,14 +147,11 @@ class Field(RegisterLookupMixin, Generic[T]):
147147
"limit_choices_to",
148148
# Database-level options are not supported, see #21961.
149149
"on_delete",
150-
"related_name",
151150
"related_query_name",
152151
"validators",
153152
)
154153

155154
# Field flags
156-
hidden = False
157-
158155
many_to_many = None
159156
many_to_one = None
160157
one_to_many = None

0 commit comments

Comments
 (0)