Как исправить, что экземпляр '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 позволили этому вкрасться.