Skip to content

cant join an empty team #1945

@tykling

Description

@tykling

Describe the bug
it is impossible to join a team which has 0 members

ValidationError at /bornhack-2026/teams/orga/join/
{'recipient': ['either to_recipient, bcc_recipient or cc_recipient required.']}

Request Method: POST
Request URL: https://bornhack.dk/bornhack-2026/teams/orga/join/
Django Version: 4.2.21
Python Executable: /usr/local/bin/uwsgi-3.11
Python Version: 3.11.14
Python Path: ['.', '', '/usr/local/lib/python311.zip', '/usr/local/lib/python3.11', '/usr/local/lib/python3.11/lib-dynload', '/usr/local/virtualenv/lib/python3.11/site-packages']
Server time: Sat, 06 Dec 2025 10:03:05 +0100
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.sites',
 'django.contrib.gis',
 'django.contrib.humanize',
 'colorfield',
 'channels',
 'corsheaders',
 'profiles',
 'camps',
 'shop',
 'news',
 'utils',
 'villages',
 'program',
 'info',
 'sponsors',
 'ircbot',
 'teams',
 'people',
 'tickets',
 'backoffice',
 'events',
 'rideshare',
 'tokens',
 'feedback',
 'economy',
 'wishlist',
 'facilities',
 'phonebook',
 'maps',
 'allauth',
 'allauth.account',
 'allauth.socialaccount',
 'allauth.mfa',
 'django_otp',
 'django_otp.plugins.otp_totp',
 'django_otp.plugins.otp_static',
 'django_bootstrap5',
 'reversion',
 'leaflet',
 'oauth2_provider',
 'taggit',
 'django_tables2',
 'django_filters']
Installed Middleware:
['django_prometheus.middleware.PrometheusBeforeMiddleware',
 'utils.middleware.NeverVaryTilesMiddleware',
 'django.middleware.gzip.GZipMiddleware',
 'corsheaders.middleware.CorsMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'allauth.account.middleware.AccountMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django_otp.middleware.OTPMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'utils.middleware.RedirectExceptionMiddleware',
 'camps.middleware.RequestCampMiddleware',
 'oauth2_provider.middleware.OAuth2TokenMiddleware',
 'oauth2_provider.middleware.OAuth2ExtraTokenMiddleware',
 'django_prometheus.middleware.PrometheusAfterMiddleware']


Traceback (most recent call last):
  File "/usr/local/virtualenv/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/virtualenv/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/virtualenv/lib/python3.11/site-packages/django/views/generic/base.py", line 104, in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/virtualenv/lib/python3.11/site-packages/django/contrib/auth/mixins.py", line 73, in dispatch
    return super().dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/virtualenv/lib/python3.11/site-packages/django/views/generic/base.py", line 143, in dispatch
    return handler(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/virtualenv/lib/python3.11/site-packages/django/views/generic/edit.py", line 208, in post
    return super().post(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/virtualenv/lib/python3.11/site-packages/django/views/generic/edit.py", line 153, in post
    return self.form_valid(form)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/www/django/src/teams/views/members.py", line 71, in form_valid
    TeamMember.objects.create(team=self.get_object(), user=self.request.user)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/virtualenv/lib/python3.11/site-packages/django/db/models/manager.py", line 87, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/virtualenv/lib/python3.11/site-packages/django/db/models/query.py", line 658, in create
    obj.save(force_insert=True, using=self.db)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/www/django/src/utils/models.py", line 104, in save
    super().save(**kwargs)
    ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/www/django/src/utils/models.py", line 61, in save
    super().save(**kwargs)
    ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/virtualenv/lib/python3.11/site-packages/django/db/models/base.py", line 814, in save
    self.save_base(
    ^
  File "/usr/local/virtualenv/lib/python3.11/site-packages/django/db/models/base.py", line 892, in save_base
    post_save.send(
    ^
  File "/usr/local/virtualenv/lib/python3.11/site-packages/django/dispatch/dispatcher.py", line 176, in send
    return [
           
  File "/usr/local/virtualenv/lib/python3.11/site-packages/django/dispatch/dispatcher.py", line 177, in <listcomp>
    (receiver, receiver(signal=self, sender=sender, **named))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/www/django/src/teams/signal_handlers.py", line 26, in teammember_saved
    if not add_new_membership_email(instance):
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/www/django/src/teams/email.py", line 60, in add_new_membership_email
    return add_outgoing_email(
           
  File "/usr/local/www/django/src/utils/email.py", line 121, in add_outgoing_email
    email = OutgoingEmail.objects.create(
            
  File "/usr/local/virtualenv/lib/python3.11/site-packages/django/db/models/manager.py", line 87, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/virtualenv/lib/python3.11/site-packages/django/db/models/query.py", line 658, in create
    obj.save(force_insert=True, using=self.db)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/www/django/src/utils/models.py", line 52, in save
    self.clean()
    ^^^^^^^^^^^^
  File "/usr/local/www/django/src/utils/models.py", line 172, in clean
    raise ValidationError(
    ^

Exception Type: ValidationError at /bornhack-2026/teams/orga/join/
Exception Value: {'recipient': ['either to_recipient, bcc_recipient or cc_recipient required.']}
Raised during: teams.views.members.TeamJoinView
Request information:
USER: 125ce075-2008-4796-8f46-31fb89d6d7a4

GET: No GET data

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions