Django Admin SerializationError: TypeError ("Невозможно сериализовать - PullRequest
0 голосов
/ 31 января 2020

Я новичок ie до Django. Я пытаюсь добавить экземпляр отчета из панели администратора. Я получаю ошибку SerializationError, когда пытаюсь сохранить форму. Я определил в модели отчета в models.py идентификатор_ключа ForeignKey, связанный с пользователем из django .contrib.auth.models. В admin.py я переопределяю метод save, чтобы сохранить объект пользователя следующим образом:

class ReportAdmin(admin.ModelAdmin):

    list_display = ('nm_report', 'id_object', 'id_perspective', 'ds_report', 'nm_department', 'id_owner', 'dh_update_date', 'fl_natural_language')
    list_filter = ('nm_report', 'id_object', 'id_perspective', 'ds_report', 'nm_department', 'id_owner', 'dh_update_date', 'fl_natural_language')
    ordering = ('nm_report', 'id_object', 'id_perspective', 'ds_report', 'nm_department', 'id_owner', 'dh_update_date', 'fl_natural_language')
    search_fields = ('nm_name', 'id_object', 'id_created_by__name', )
    exclude = ('dh_created', 'id_created_by', 'dh_last_modified', 'id_last_modified_by', )

    def save_model(self, request, obj, form, change):
        obj.id_owner = request.user
        super().save_model(request, obj, form, change)

admin.site.register(dictionary_models.Report, ReportAdmin)

Ошибка, которую я получаю:

Ошибка SerializationEr в / admin / dictionary / report / 29 / change / ({'id': 29, 'nm_report': 'Report', 'ds_report': 'description', 'id_created_by': {}, 'id_last_modified_by': {}, 'id_owner': пользователь: admin, 'id_perspective': {'id': 1, 'nm_perspective': 'Perspectiva1'}, 'dh_created': datetime.datetime (2020, 1, 28, 16, 16, 1, 82882, tzinfo = UT C), 'nm_department': 'departamento', 'id_dossier': 'id del dossier', 'fl_oficial_field': True, 'nm_oficial_text': '.', 'fl_natural_language': False, 'nu_sensitivity': 2, 'fl_show_private': True, 'dh_update_date': datetime.datetime (2020, 1, 28, 16, 15, 41, tzinfo = UT C)}, TypeError ("Невозможно сериализовать (тип: класс 'django .contrib.auth.models. User ') "))

Модель отчета в models.py:

class Report(models.Model):

    nm_report = models.CharField(max_length = 255, verbose_name="Nombre")
    id_object = models.ForeignKey('dictionary.Object', on_delete = models.CASCADE, default = 1, verbose_name="Objeto", db_column = 'id_object') # WARN DEFAULT
    nm_department = models.CharField(max_length = 100, verbose_name="Departamento")
    ds_report = models.CharField(max_length = 1000, verbose_name="Descripción")
    id_perspective = models.ForeignKey('dictionary.Perspective', on_delete = models.CASCADE, verbose_name="Perspectiva", default = 1, db_column = 'id_perspective') # WARN DEFAULT 
    id_dossier = models.CharField(max_length = 100, verbose_name="ID del Dossier")
    fl_oficial_field = models.BooleanField(default = False, verbose_name="Campo Oficial")
    nm_oficial_text = models.TextField(verbose_name="Texto Oficial")
    nu_sensitivity = models.IntegerField(verbose_name="Sensibilidad")
    fl_show_private = models.BooleanField(default = True, verbose_name="Mostrar Privado")
    id_owner =  models.ForeignKey(User, on_delete = models.CASCADE, related_name = 'report_owner_relation', verbose_name="Propietario", db_column = 'id_owner',default = 1)
    fl_natural_language = models.BooleanField(default = False, verbose_name="Lenguaje Natural")
    dh_update_date = models.DateTimeField(default = timezone.now, verbose_name="Fecha de Subida")
    dh_created = models.DateTimeField(default = timezone.now, verbose_name="Creado en", )
    id_created_by = models.ForeignKey(User, on_delete = models.CASCADE, related_name = 'report_created_by_relation', verbose_name="Creado por", db_column = 'id_created_by') # WARN DEFAULT 
    dh_last_modified = models.DateTimeField(default = timezone.now, verbose_name="Última Modificación", )
    id_last_modified_by = models.ForeignKey(User, on_delete = models.CASCADE,default = 1, verbose_name = "Modificado por última vez por", related_name="report_last_modified_by_relation", db_column = 'id_last_modified_by')

Я попытался передать request.user.id, но я получил другую ошибку, которая говорит, что Мне нужно передать пользовательский инст ance.

Я использую ElasticSearch, и ошибка начинается вasticsearch / serializer.py:

def dumps(self, data):
    # don't serialize strings
    if isinstance(data, string_types):
        return data
    try:
        return json.dumps( ...
            data, default=self.default, ensure_ascii=False, separators=(",", ":")
        )
    except (ValueError, TypeError) as e:
        raise SerializationError(data, e)

Видимо, когда выполняется json .dumps, он не может сериализовать id_owner как это пользовательский экземпляр.

...