doableware / djongo

Django and MongoDB database connector
https://www.djongomapper.com
GNU Affero General Public License v3.0
1.86k stars 351 forks source link

Django admin cannot save model that has ForeignKey field #662

Closed Sharmiko closed 1 year ago

Sharmiko commented 1 year ago

One line description of the issue

Django admin cannot save model that has ForeignKey in it. Tried without this field and works fine. When I select model from dropdown and click save, I Get No exception message supplied error message.

Python script

models.py

from djongo import models

class WebsiteCode(Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    login = models.CharField(max_length=150)
    password = models.CharField(max_length=150)

    class Meta:
        db_table = "website_codes"

    def __str__(self):
        return self.login

class Dealer(Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    first_name = models.CharField(max_length=150)
    last_name = models.CharField(max_length=150)
    email = models.CharField(max_length=150)
    password = models.CharField(max_length=150)
    website_code = models.ForeignKey(to=WebsiteCode, on_delete=models.DO_NOTHING)

    class Meta:
        db_table = "dealers"

admin.py

from django.contrib import admin
from .models import Dealer, WebsiteCode

@admin.register(Dealer)
class DealerAdmin(admin.ModelAdmin):
    list_display = ("first_name", "last_name", "email")
    list_select_related = True

@admin.register(WebsiteCode)
class WebsiteCodeAdmin(admin.ModelAdmin):
    list_display = ("login", )

Traceback

Environment:

Request Method: POST Request URL: http://127.0.0.1:8000/admin/dealer/dealer/add/

Django Version: 4.1.7 Python Version: 3.10.10 Installed Applications: ['dealer', 'bids', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']

Traceback (most recent call last): File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/djongo/sql2mongo/query.py", line 808, in iter yield from iter(self._query) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/djongo/sql2mongo/query.py", line 167, in iter yield self._align_results(doc) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/djongo/sql2mongo/query.py", line 269, in _align_results if selected.table == self.left_table: File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/djongo/sql2mongo/sql_tokens.py", line 133, in table return alias2token[name].table File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/djongo/sql2mongo/sql_tokens.py", line 133, in table

File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/djongo/sql2mongo/sql_tokens.py", line 133, in table return alias2token[name].table File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/djongo/sql2mongo/sql_tokens.py", line 130, in table name = self.given_table File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/djongo/sql2mongo/sql_tokens.py", line 141, in given_table name = self._token.get_real_name() File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/sqlparse/sql.py", line 361, in get_real_name return self._get_first_name(dot_idx) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/sqlparse/sql.py", line 386, in _get_first_name return token.get_name() File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/sqlparse/sql.py", line 355, in get_name return self.get_alias() or self.get_real_name() File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/sqlparse/sql.py", line 344, in getalias , ws = self.token_next_by(t=T.Whitespace) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/sqlparse/sql.py", line 244, in token_next_by return self._token_matching(funcs, idx, end) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/sqlparse/sql.py", line 223, in _token_matching if func(token): File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/sqlparse/sql.py", line 242, in funcs = lambda tk: imt(tk, i, m, t) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/sqlparse/utils.py", line 100, in imt elif types and any(token.ttype in ttype for ttype in types): File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/sqlparse/utils.py", line 100, in elif types and any(token.ttype in ttype for ttype in types): File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/sqlparse/tokens.py", line 19, in contains return item is not None and (self is item or item[:len(self)] == self)

The above exception (maximum recursion depth exceeded in comparison) was the direct cause of the following exception: File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/djongo/cursor.py", line 76, in fetchone return self.result.next() File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/djongo/sql2mongo/query.py", line 797, in next result = next(self._result_generator) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/djongo/sql2mongo/query.py", line 830, in iter raise exe from e

The above exception (

Keyword: FAILED SQL: SELECT %(0)s AS "a" FROM "website_codes" WHERE "website_codes"."id" = %(1)s LIMIT 1

Params: (1, UUID('88cc81fe-43e7-48b5-aea6-2332805e10e3')) Version: 1.3.6 Sub SQL: None FAILED SQL: None Params: None Version: None) was the direct cause of the following exception: File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/db/utils.py", line 98, in inner return func(*args, **kwargs) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/djongo/cursor.py", line 81, in fetchone raise db_exe from e

The above exception () was the direct cause of the following exception: File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 56, in inner response = get_response(request) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response response = wrapped_callback(request, *callback_args, callback_kwargs) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/contrib/admin/options.py", line 686, in wrapper return self.admin_site.admin_view(view)(*args, *kwargs) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/utils/decorators.py", line 134, in _wrapped_view response = view_func(request, args, kwargs) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/views/decorators/cache.py", line 62, in _wrapped_view_func response = view_func(request, *args, kwargs) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/contrib/admin/sites.py", line 242, in inner return view(request, *args, *kwargs) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/contrib/admin/options.py", line 1891, in add_view return self.changeform_view(request, None, form_url, extra_context) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/utils/decorators.py", line 46, in _wrapper return bound_method(args, kwargs) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/utils/decorators.py", line 134, in _wrapped_view response = view_func(request, *args, *kwargs) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/contrib/admin/options.py", line 1751, in changeform_view return self._changeform_view(request, object_id, form_url, extra_context) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/contrib/admin/options.py", line 1797, in _changeform_view form_validated = form.is_valid() File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/forms/forms.py", line 205, in is_valid return self.is_bound and not self.errors File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/forms/forms.py", line 200, in errors self.full_clean() File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/forms/forms.py", line 439, in full_clean self._post_clean() File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/forms/models.py", line 492, in _post_clean self.instance.full_clean(exclude=exclude, validate_unique=False) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/db/models/base.py", line 1448, in full_clean self.clean_fields(exclude=exclude) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/db/models/base.py", line 1500, in clean_fields setattr(self, f.attname, f.clean(raw_value, self)) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/db/models/fields/init.py", line 755, in clean self.validate(value, model_instance) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/db/models/fields/related.py", line 1088, in validate if not qs.exists(): File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/db/models/query.py", line 1226, in exists return self.query.has_results(using=self.db) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/db/models/sql/query.py", line 592, in has_results return compiler.has_results() File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1366, in has_results return bool(self.execute_sql(SINGLE)) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1409, in execute_sql val = cursor.fetchone() File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/db/utils.py", line 97, in inner with self: File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/db/utils.py", line 91, in exit raise dj_exc_value.with_traceback(traceback) from exc_value File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/django/db/utils.py", line 98, in inner return func(args, **kwargs) File "/home/sharmi/Desktop/dealer_manager_backend/venv/lib/python3.10/site-packages/djongo/cursor.py", line 81, in fetchone raise db_exe from e

Exception Type: DatabaseError at /admin/dealer/dealer/add/ Exception Value:

zolghadri commented 10 months ago

I have same problem. Did you find any solution?