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. afrowave + + John + + thorrak + + + 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)