## Summary Closes #20. - Bump Django pin from `>=5.2,<6` to `>=6.0,<7` (resolved **6.0.7**) and refresh `uv.lock` - Update `TimeInfoBase.save` for Django 6 keyword-only `Model.save` - Pass `required_score` directly to `ReCaptchaV3` (removes django-recaptcha deprecation warning) - Fix `Payments.date` fixed default → callable `timezone.now` (+ migration `0012`) Reviewed against [Django 6.0 release notes](https://docs.djangoproject.com/en/6.0/releases/6.0/). `DEFAULT_AUTO_FIELD` already `BigAutoField`. No other removed APIs in use. **Compat notes** - `django-phonenumber-field` 8.4.0 advertises Django 6.0 support - `django-recaptcha` 4.1.0 has no upper Django bound; classifiers still list through 5.2 only — smoke-tested via suite ## Test plan - [x] `uv run python manage.py check` — clean - [x] `uv run python manage.py test` — 30 passed - [ ] CI unit tests green on this PR - [ ] Smoke board pages, membership form, auth/sign-in, recaptcha after merge/deploy Reviewed-on: #26
This commit was merged in pull request #26.
This commit is contained in:
+1
-1
@@ -5,7 +5,7 @@ description = "Django site for SCHA Wheaton"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.12"
|
||||
dependencies = [
|
||||
"django>=5.2,<6",
|
||||
"django>=6.0,<7",
|
||||
"django-phonenumber-field>=8.1.0",
|
||||
"django-recaptcha>=4.1.0",
|
||||
"gunicorn>=23.0.0",
|
||||
|
||||
+1
-5
@@ -19,11 +19,7 @@ class CaptchaForm(forms.Form):
|
||||
captcha = ReCaptchaField(
|
||||
public_key=settings.RECAPTCHA_PUBLIC_KEY,
|
||||
private_key=settings.RECAPTCHA_PRIVATE_KEY,
|
||||
widget=ReCaptchaV3(
|
||||
attrs={
|
||||
'required_score':0.85,
|
||||
}
|
||||
),
|
||||
widget=ReCaptchaV3(required_score=0.85),
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# Generated by Django 6.0.7 on 2026-07-14 12:13
|
||||
|
||||
import django.utils.timezone
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('schasite', '0011_alter_payments_date_communitymember_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='payments',
|
||||
name='date',
|
||||
field=models.DateField(default=django.utils.timezone.now),
|
||||
),
|
||||
]
|
||||
+3
-3
@@ -12,13 +12,13 @@ class TimeInfoBase(models.Model):
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
def save(self, **kwargs):
|
||||
if not kwargs.pop("skip_last_modified", False) and not hasattr(self, "skip_last_modified"):
|
||||
self.last_modified = timezone.now()
|
||||
if kwargs.get("update_fields") is not None:
|
||||
kwargs["update_fields"] = list({*kwargs["update_fields"], "last_modified"})
|
||||
|
||||
super().save(*args, **kwargs)
|
||||
super().save(**kwargs)
|
||||
|
||||
# Create your models here.
|
||||
class UsefulLinks(TimeInfoBase):
|
||||
@@ -148,7 +148,7 @@ class MembershipServices(TimeInfoBase):
|
||||
|
||||
|
||||
class Payments(TimeInfoBase):
|
||||
date = models.DateField(default=timezone.now())
|
||||
date = models.DateField(default=timezone.now)
|
||||
status = models.CharField(default="Completed", max_length=256)
|
||||
email = models.EmailField(blank=True, null=True)
|
||||
person = models.ForeignKey(
|
||||
|
||||
@@ -101,16 +101,16 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "django"
|
||||
version = "5.2.16"
|
||||
version = "6.0.7"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "asgiref" },
|
||||
{ name = "sqlparse" },
|
||||
{ name = "tzdata", marker = "sys_platform == 'win32'" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/a9/26/889449d521ae508b26de715954faecd8bcf3f740affb81b2d146a83b42a5/django-5.2.16.tar.gz", hash = "sha256:59ea02020c3136fce14bef0bbece21a10a4febef5eed1c51c22ae468efa22200", size = 10890894, upload-time = "2026-07-07T13:52:17.005Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/89/55/664f24ff81c9ea19cb7dfc851afeae1f3c2390c7aee01d4ded68b5c1580d/django-6.0.7.tar.gz", hash = "sha256:2998503fc083124fb58037084bfa00de323c7c743f05f1b4284e77bff0ab8890", size = 10921299, upload-time = "2026-07-07T13:51:26.485Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/4e/13/1e5e3e4c15dcecb04281b3cb2a46a4670e1cef131068e202f6040df19224/django-5.2.16-py3-none-any.whl", hash = "sha256:04f354bf9d807a86ad1a8392fe3808d362358a8eafc322848e0e43e59b24371d", size = 8311943, upload-time = "2026-07-07T13:52:11.223Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ba/ec/1ce5334b6a2c52ce619c23a0be8d366a57a0e080ebb2d88266e5c849157c/django-6.0.7-py3-none-any.whl", hash = "sha256:a037427c2288443a8c02a1b02295a31c239663aa682bc50b1976afb7cf6a769e", size = 8373344, upload-time = "2026-07-07T13:51:20.007Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -366,7 +366,7 @@ dev = [
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "django", specifier = ">=5.2,<6" },
|
||||
{ name = "django", specifier = ">=6.0,<7" },
|
||||
{ name = "django-phonenumber-field", specifier = ">=8.1.0" },
|
||||
{ name = "django-recaptcha", specifier = ">=4.1.0" },
|
||||
{ name = "gunicorn", specifier = ">=23.0.0" },
|
||||
|
||||
Reference in New Issue
Block a user