doableware / djongo

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

Unable to save Embedded field data in django admin #575

Open RashmiR31 opened 3 years ago

RashmiR31 commented 3 years ago

One line description of the issue

Unable to save Embedded field data in django admin

Python script

Create your models here.

models.py

from django.db import models from djongo import models from django import forms

class Book(models.Model): title=models.CharField(max_length=200) author=models.CharField(max_length=200)

class Meta:
    abstract = True

class BookForm(forms.ModelForm): class Meta: model=Book fields = ('title','author')

class Post(models.Model): heading = models.CharField(max_length=200) content = models.EmbeddedField( model_container = Book, model_form_class = BookForm ) objects = models.DjongoManager()

admin.py

from django.contrib import admin from .models import *

admin.site.register(Post)

forms.py

from django import forms from .models import *

class PostForm(forms.ModelForm): class Meta: model = Post fields = 'all'

![image](https://user-images.githubusercontent.com/59019102/136337792-35a968ef-3c38-4756-a058-14e0fb8644c8.png) ![image](https://user-images.githubusercontent.com/59019102/136337877-6b9770ed-6e8f-4d50-b2c8-922eeb526be3.png) #### Traceback Environment: Request Method: POST Request URL: http://127.0.0.1:8000/admin/myapp/post/add/ Django Version: 3.1.3 Python Version: 3.8.10 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myapp'] 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 "C:\Users\Admin\test\lib\site-packages\django\core\handlers\exception.py", line 47, in inner response = get_response(request) File "C:\Users\Admin\test\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\Admin\test\lib\site-packages\django\contrib\admin\options.py", line 614, in wrapper return self.admin_site.admin_view(view)(*args, **kwargs) File "C:\Users\Admin\test\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view response = view_func(request, *args, **kwargs) File "C:\Users\Admin\test\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func response = view_func(request, *args, **kwargs) File "C:\Users\Admin\test\lib\site-packages\django\contrib\admin\sites.py", line 233, in inner return view(request, *args, **kwargs) File "C:\Users\Admin\test\lib\site-packages\django\contrib\admin\options.py", line 1653, in add_view return self.changeform_view(request, None, form_url, extra_context) File "C:\Users\Admin\test\lib\site-packages\django\utils\decorators.py", line 43, in _wrapper return bound_method(*args, **kwargs) File "C:\Users\Admin\test\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view response = view_func(request, *args, **kwargs) File "C:\Users\Admin\test\lib\site-packages\django\contrib\admin\options.py", line 1534, in changeform_view return self._changeform_view(request, object_id, form_url, extra_context) File "C:\Users\Admin\test\lib\site-packages\django\contrib\admin\options.py", line 1573, in _changeform_view form_validated = form.is_valid() File "C:\Users\Admin\test\lib\site-packages\django\forms\forms.py", line 177, in is_valid return self.is_bound and not self.errors File "C:\Users\Admin\test\lib\site-packages\django\forms\forms.py", line 172, in errors self.full_clean() File "C:\Users\Admin\test\lib\site-packages\django\forms\forms.py", line 376, in full_clean self._post_clean() File "C:\Users\Admin\test\lib\site-packages\django\forms\models.py", line 405, in _post_clean self.instance.full_clean(exclude=exclude, validate_unique=False) File "C:\Users\Admin\test\lib\site-packages\django\db\models\base.py", line 1209, in full_clean self.clean_fields(exclude=exclude) File "C:\Users\Admin\test\lib\site-packages\django\db\models\base.py", line 1251, in clean_fields setattr(self, f.attname, f.clean(raw_value, self)) File "C:\Users\Admin\test\lib\site-packages\django\db\models\fields\__init__.py", line 650, in clean value = self.to_python(value) File "C:\Users\Admin\test\lib\site-packages\djongo\models\fields.py", line 259, in to_python f'Value: {value} must be an instance of {self.base_type}') File "C:\Users\Admin\test\lib\site-packages\django\db\models\base.py", line 522, in __str__ return '%s object (%s)' % (self.__class__.__name__, self.pk) File "C:\Users\Admin\test\lib\site-packages\django\db\models\base.py", line 573, in _get_pk_val return getattr(self, meta.pk.attname) Exception Type: AttributeError at /admin/myapp/post/add/ Exception Value: 'NoneType' object has no attribute 'attname'
LuAlJaBe commented 2 years ago

Same issue. I added str to my abstract classes and now it is a validation error. Django admin says that my values must be an instance of <class 'list'> to my models. ArrayField and an instance of <class 'dict'> to my models.EmbeddedField

zi-bot commented 2 years ago

yeah same issue with me, I work with Django 3.8 and Djongo 1.3.3

vkpdeveloper commented 2 years ago

@nesdis dear I am also facing the same issue. It's really urgent.

DDTEC-00 commented 2 years ago

Indeed this issue persists, really messing up my day.

josemojena commented 2 years ago

Any update on this?

Diarrassouba02 commented 1 year ago

quelqu'un à put trouver la solution?