Как исправить, что экземпляр 'Message' должен иметь значение первичного ключа, прежде чем это отношение может быть использовано

Когда я пытаюсь добавить сообщение со страницы администратора, я получаю сообщение о том, что экземпляр 'Message' должен иметь значение первичного ключа, прежде чем это отношение может быть использовано.

Вот мой класс models.py Message...

class Message(models.Model):
    """ Message as sent through a Submission. """
    
    default_id = time.time()
    #adding primary key to satisfy error
    id = models.BigAutoField(primary_key=True, auto_created=True)
    title = models.CharField(max_length=200, verbose_name=_('title'))
    slug = models.SlugField(verbose_name=_('slug'))

    newsletter = models.ForeignKey(
        Newsletter, verbose_name=_('newsletter'), on_delete=models.CASCADE, default=get_default_newsletter
    )

    date_create = models.DateTimeField(
        verbose_name=_('created'), auto_now_add=True, editable=False
    )
    date_modify = models.DateTimeField(
        verbose_name=_('modified'), auto_now=True, editable=False
    )

    class Meta:
        verbose_name = _('message')
        verbose_name_plural = _('messages')
        unique_together = ('slug', 'newsletter')
        #order_with_respect_to = 'newsletter'

    def __str__(self):
        try:
            return _("%(title)s in %(newsletter)s") % {
                'title': self.title,
                'newsletter': self.newsletter
            }
        except Newsletter.DoesNotExist:
            logger.warning('No newsletter has been set for this message yet.')
            return self.title

    def get_next_article_sortorder(self):
        """ Get next available sortorder for Article. """

        next_order = self.articles.aggregate(
            models.Max('sortorder')
        )['sortorder__max']

        if next_order:
            return next_order + 10
        else:
            return 10

    @cached_property
    def _templates(self):
        """Return a (subject_template, text_template, html_template) tuple."""
        return self.newsletter.get_templates('message')

    @property
    def subject_template(self):
        return self._templates[0]

    @property
    def text_template(self):
        return self._templates[1]

    @property
    def html_template(self):
        return self._templates[2]

    @classmethod
    def get_default(cls):
        try:
            return cls.objects.order_by('-date_create').all()[0]
        except IndexError:
            return None

и модуль admin.py

Я попробовал ряд исправлений, рекомендованных в сообщениях об этой ошибке здесь на stackoverflow и на github. но ни одно из них не решило проблему.

Я создал id = models.BigAutoField(primary_key=True, auto_created=True) и проверил в sqlite db, что первичный ключ и автоинкремент находятся в структуре.

Мне кажется, что создание сквозной или xref таблицы между Message и Article решило бы эту проблему, но я сомневаюсь, потому что разработчики Jazzband Newsletter (https://github.com/jazzband/django-newsletter) сделали это таким образом не просто так, и что Django или обновления Python позволили этому вкрасться.

Вернуться на верх