diff --git a/.github/contributors.json b/.github/contributors.json
index 99fd084f..7976ce1d 100644
--- a/.github/contributors.json
+++ b/.github/contributors.json
@@ -1057,5 +1057,10 @@
"name": "Yotam Tal",
"github_login": "yotamtal",
"twitter_username": ""
+ },
+ {
+ "name": "John",
+ "github_login": "thorrak",
+ "twitter_username": ""
}
]
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 13531da5..1b47539f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,10 @@ All enhancements and patches to Cookiecutter Django will be documented in this f
+## [2021-01-22]
+### Changed
+- Use self.request.user instead of second query ([#3012](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3012))
+
## [2021-01-14]
### Updated
- Update tox to 3.21.1 ([#3006](https://api.github.com/repos/pydanny/cookiecutter-django/pulls/3006))
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index 75f0efd2..dd66bd95 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -866,6 +866,13 @@ Listed in alphabetical order.
John Cass |
diff --git a/requirements.txt b/requirements.txt
index 375d6345..55182fa3 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -11,7 +11,7 @@ flake8-isort==4.0.0
# Testing
# ------------------------------------------------------------------------------
-tox==3.21.1
+tox==3.21.2
pytest==5.4.3 # pyup: <6 # https://github.com/hackebrot/pytest-cookies/issues/51
pytest-cookies==0.5.1
pytest-instafail==0.4.2
diff --git a/{{cookiecutter.project_slug}}/requirements/local.txt b/{{cookiecutter.project_slug}}/requirements/local.txt
index 349442ac..9e26f6f0 100644
--- a/{{cookiecutter.project_slug}}/requirements/local.txt
+++ b/{{cookiecutter.project_slug}}/requirements/local.txt
@@ -13,7 +13,7 @@ watchgod==0.6 # https://github.com/samuelcolvin/watchgod
# Testing
# ------------------------------------------------------------------------------
-mypy==0.790 # https://github.com/python/mypy
+mypy==0.800 # https://github.com/python/mypy
django-stubs==1.7.0 # https://github.com/typeddjango/django-stubs
pytest==6.2.1 # https://github.com/pytest-dev/pytest
pytest-sugar==0.9.4 # https://github.com/Frozenball/pytest-sugar
@@ -37,7 +37,7 @@ pre-commit==2.9.3 # https://github.com/pre-commit/pre-commit
# Django
# ------------------------------------------------------------------------------
-factory-boy==3.1.0 # https://github.com/FactoryBoy/factory_boy
+factory-boy==3.2.0 # https://github.com/FactoryBoy/factory_boy
django-debug-toolbar==3.2 # https://github.com/jazzband/django-debug-toolbar
django-extensions==3.1.0 # https://github.com/django-extensions/django-extensions
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/migrations/0001_initial.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/migrations/0001_initial.py
index c9d89056..ef2c2d94 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/migrations/0001_initial.py
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/migrations/0001_initial.py
@@ -53,18 +53,6 @@ class Migration(migrations.Migration):
verbose_name="username",
),
),
- (
- "first_name",
- models.CharField(
- blank=True, max_length=30, verbose_name="first name"
- ),
- ),
- (
- "last_name",
- models.CharField(
- blank=True, max_length=150, verbose_name="last name"
- ),
- ),
(
"email",
models.EmailField(
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/models.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/models.py
index 8391bc03..935eee9a 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/models.py
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/models.py
@@ -9,6 +9,8 @@ class User(AbstractUser):
#: First and last name do not cover name patterns around the globe
name = CharField(_("Name of User"), blank=True, max_length=255)
+ first_name = None # type: ignore
+ last_name = None # type: ignore
def get_absolute_url(self):
"""Get url for user's detail view.
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/factories.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/factories.py
index 05b3ae0b..edd306cb 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/factories.py
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/factories.py
@@ -23,7 +23,7 @@ class UserFactory(DjangoModelFactory):
digits=True,
upper_case=True,
lower_case=True,
- ).generate(params={"locale": None})
+ ).evaluate(None, None, extra={"locale": None})
)
self.set_password(password)
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/test_views.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/test_views.py
index 3638c8f6..c2fe8b51 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/test_views.py
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/tests/test_views.py
@@ -1,8 +1,12 @@
import pytest
+from django.contrib import messages
from django.contrib.auth.models import AnonymousUser
+from django.contrib.messages.middleware import MessageMiddleware
+from django.contrib.sessions.middleware import SessionMiddleware
from django.http.response import Http404
from django.test import RequestFactory
+from {{ cookiecutter.project_slug }}.users.forms import UserChangeForm
from {{ cookiecutter.project_slug }}.users.models import User
from {{ cookiecutter.project_slug }}.users.tests.factories import UserFactory
from {{ cookiecutter.project_slug }}.users.views import (
@@ -41,6 +45,25 @@ class TestUserUpdateView:
assert view.get_object() == user
+ def test_form_valid(self, user: User, rf: RequestFactory):
+ view = UserUpdateView()
+ request = rf.get("/fake-url/")
+
+ # Add the session/message middleware to the request
+ SessionMiddleware().process_request(request)
+ MessageMiddleware().process_request(request)
+ request.user = user
+
+ view.request = request
+
+ # Initialize the form
+ form = UserChangeForm()
+ form.cleaned_data = []
+ view.form_valid(form)
+
+ messages_sent = [m.message for m in messages.get_messages(request)]
+ assert messages_sent == ["Information successfully updated"]
+
class TestUserRedirectView:
def test_get_redirect_url(self, user: User, rf: RequestFactory):
diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/views.py b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/views.py
index 520b1e52..011ea410 100644
--- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/views.py
+++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/users/views.py
@@ -27,11 +27,11 @@ class UserUpdateView(LoginRequiredMixin, UpdateView):
return reverse("users:detail", kwargs={"username": self.request.user.username})
def get_object(self):
- return User.objects.get(username=self.request.user.username)
+ return self.request.user
def form_valid(self, form):
messages.add_message(
- self.request, messages.INFO, _("Infos successfully updated")
+ self.request, messages.INFO, _("Information successfully updated")
)
return super().form_valid(form)
|