I'm running Django rest api with django 3.2 and docker on GCP Ubuntu 22.04. I'm getting an error when I run the web server container :

django.core.serializers.base.DeserializationError: Problem installing fixture '/opt/my-api/mynetwork_common/fixtures/emoji-groups.json'

The detailed trace is here :

my-api-webserver | Traceback (most recent call last):
my-api-webserver |   File "/usr/local/lib/python3.8/site-packages/django/core/serializers/json.py", line 69, in Deserializer
my-api-webserver |     objects = json.loads(stream_or_string)
my-api-webserver |   File "/usr/local/lib/python3.8/json/__init__.py", line 357, in loads
my-api-webserver |     return _default_decoder.decode(s)
my-api-webserver |   File "/usr/local/lib/python3.8/json/decoder.py", line 337, in decode
my-api-webserver |     obj, end = self.raw_decode(s, idx=_w(s, 0).end())
my-api-webserver |   File "/usr/local/lib/python3.8/json/decoder.py", line 355, in raw_decode
my-api-webserver |     raise JSONDecodeError("Expecting value", s, err.value) from None
my-api-webserver | json.decoder.JSONDecodeError: Expecting value: line 11 column 28 (char 266)
my-api-webserver | 
my-api-webserver | The above exception was the direct cause of the following exception:
my-api-webserver | 
my-api-webserver | Traceback (most recent call last):
my-api-webserver |   File "manage.py", line 25, in <module>
my-api-webserver |     execute_from_command_line(sys.argv)
my-api-webserver |   File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
my-api-webserver |     utility.execute()
my-api-webserver |   File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 413, in execute
my-api-webserver |     self.fetch_command(subcommand).run_from_argv(self.argv)
my-api-webserver |   File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 354, in run_from_argv
my-api-webserver |     self.execute(*args, **cmd_options)
my-api-webserver |   File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 398, in execute
my-api-webserver |     output = self.handle(*args, **options)
my-api-webserver |   File "/usr/local/lib/python3.8/site-packages/modeltranslation/management/commands/loaddata.py", line 49, in handle
my-api-webserver |     return super(Command, self).handle(*fixture_labels, **options)
my-api-webserver |   File "/usr/local/lib/python3.8/site-packages/django/core/management/commands/loaddata.py", line 78, in handle
my-api-webserver |     self.loaddata(fixture_labels)
my-api-webserver |   File "/usr/local/lib/python3.8/site-packages/django/core/management/commands/loaddata.py", line 123, in loaddata
my-api-webserver |     self.load_label(fixture_label)
my-api-webserver |   File "/usr/local/lib/python3.8/site-packages/django/core/management/commands/loaddata.py", line 181, in load_label
my-api-webserver |     for obj in objects:
my-api-webserver |   File "/usr/local/lib/python3.8/site-packages/django/core/serializers/json.py", line 74, in Deserializer
my-api-webserver |     raise DeserializationError() from exc
my-api-webserver | django.core.serializers.base.DeserializationError: Problem installing fixture '/opt/my-api/mynetwork_common/fixtures/emoji-groups.json': 

The file which is throwing the error is :

[
  {
    "model": "mynetwork_common.EmojiGroup",
    "pk": 1,
    "fields": {
      "order": 1,
      "keyword": "primary",
      "keyword_en": "Primary",
      "color": "#FFFFFF",
      "created": "2018-10-22 12:23:30.382913+00:00",
      "is_reaction_group": True,
      "keyword_es": "",
      "keyword_de": "Standard",
      "keyword_sv": "Primära",
      "keyword_fr": "Principales",
      "keyword_it": "Principale",
      "keyword_tr": "Başlıca",
      "keyword_pt_br": "Básico"
    }
  },
  {
    "model": "mynetwork_common.EmojiGroup",
    "pk": 2,
    "fields": {
      "order": 2,
      "keyword": "obgold",
      "keyword_en": "Premium",
      "color": "#FFFFFF",
      "created": "2018-10-22 12:23:30.382913+00:00",
      "is_reaction_group": True,
      "keyword_es": "",
      "keyword_de": "Premium",
      "keyword_sv": "Premium",
      "keyword_fr": "Prémium",
      "keyword_it": "Premium",
      "keyword_tr": "Premium",
      "keyword_pt_br": "Premium"
    }
  },
  {
    "model": "mynetwork_common.EmojiGroup",
    "pk": 3,
    "fields": {
      "order": 2,
      "keyword": "objects",
      "keyword_en": "Objects",
      "color": "#FFFFFF",
      "created": "2018-10-22 12:23:30.382913+00:00",
      "is_reaction_group": false,
      "keyword_es": "",
      "keyword_de": "Objekte",
      "keyword_sv": "Objekt",
      "keyword_fr": "Objets",
      "keyword_it": "Tipi",
      "keyword_tr": "Nesneler",
      "keyword_pt_br": "Objetos"
    }
  }
]

I didn't face issues earlier with this file. The problem has suddenly come to the front. Help appreciated.

EDIT : As suggested by Alombaros as a solution , I did change the Boolean value From 'True' ---> 'true'.

However, the above error has disappeared but a new error from the same file has appeared :

KeyError: 'keyword_sv
django.core.exceptions.FieldDoesNotExist: EmojiGroup has no field named 'keyword_sv' 

followed by the same error :

django.core.serializers.base.DeserializationError: Problem installing fixture '/opt/my-api/mynetwork_common/fixtures/emoji-groups.json'

Here is models.py

class EmojiGroup(models.Model):
    keyword = models.CharField(_('keyword'), max_length=32, blank=False, null=False)
    color = models.CharField(_('color'), max_length=COLOR_ATTR_MAX_LENGTH, blank=False, null=False,
                             validators=[hex_color_validator], unique=False)
    order = models.IntegerField(unique=False, default=100)
    created = models.DateTimeField(editable=False)
    is_reaction_group = models.BooleanField(_('is reaction group'), default=False)

    def __str__(self):
        return 'EmojiGroup: ' + self.keyword

    def save(self, *args, **kwargs):
        ''' On save, update timestamps '''
        if not self.id:
            self.created = timezone.now()
        return super(EmojiGroup, self).save(*args, **kwargs)

    def has_emoji_with_id(self, emoji_id):
        return self.emojis.filter(pk=emoji_id).exists()

1

There are 1 best solutions below

6
Alombaros On

As expressed in the traceback, the parser did not understand the value line 11 column 28.
It occurres because "True" is not a JSON boolean, you should use "true" instead (You got the same mistake a second time line 30)

I'm not sure what you're trying to do with the different languages but it seems to me that every "keyword_XX" should be removed from your JSON