Ошибка Django "[object] instance with id X does not exist" при создании/обновлении внешнего ключа объекта в админке, используя фреймворк сайтов

У меня есть приложение Django, использующее фреймворк sites. У меня есть модель Category и модель Topic. Модель Topic имеет атрибут "category", указывающий на конкретный объект Category. Обе эти модели имеют атрибуты "site", связывающие их с определенными сайтами в приложении Django. Все эти сайты размещены на одном сервере.

Я заметил, что когда я создаю/обновляю объект (Тема) в админке - и устанавливаю поле внешнего ключа темы (категория) в категорию которая не находится на сайте, настроенном в параметре SITE_ID - я получаю следующее сообщение об ошибке:

экземпляр категории с id X не существует

Когда я изменяю SITE_ID в settings.py, я могу установить категорию темы в категорию на этом сайте , но не на других сайтах.

Вот диаграмма, которая поможет вам представить себе это:

технологическая карта

Здесь есть две соответствующие модели, Категория и Тема:

class Category(models.Model):
    name = models.CharField(max_length=128)
    slug = models.SlugField()
    description = RichTextUploadingField(
        blank=True,
        default='',
        verbose_name='Category Description',
        help_text='''Category description to be displayed on category page
                     goes here'''
    )
    site = models.ForeignKey(Site, on_delete=models.CASCADE)
    on_site = CurrentSiteManager()

    objects = models.Manager()

    class Meta:
        verbose_name_plural = 'categories'
        ordering = ['name']


class Topic(models.Model):
    site = models.ForeignKey(Site, on_delete=models.CASCADE)
    name = models.CharField(max_length=128)
    slug = models.SlugField()
    description = RichTextUploadingField(
        blank=True,
        default='',
        verbose_name='Topic Description',
        help_text='''Topic description to be displayed on topic page
                     goes here'''
    )
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    on_site = CurrentSiteManager()

    objects = models.Manager()

TopicAdmin настроен на получение категорий и тем для всех сайтов:

@admin.register(Topic)
class TopicAdmin(admin.ModelAdmin):
    list_display = ['name', 'site']
    save_as = True

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == 'category':
            kwargs['queryset'] = Category.objects.all().order_by('name')

        return super().formfield_for_foreignkey(db_field, request, **kwargs)

    def get_queryset(self, request):
        return Topic.objects.all()

Есть идеи, что можно сделать, чтобы темы сохранялись в соответствующей категории?

Я пытался подключиться к куче различных методов ModelAdmin, но пока не добился успеха.

Первый менеджер, определенный в модели, используется некоторыми частями Django, включая администратора, первый менеджер в ваших моделях - это CurrentSiteManager, который ограничивает результаты текущим сайтом.

Поставьте обычный models.Manager первым для каждой модели, чтобы используемый по умолчанию менеджер не был ограничен текущим сайтом

class Category(models.Model):
    ...
    objects = models.Manager()
    on_site = CurrentSiteManager()


class Topic(models.Model):
    ...
    objects = models.Manager()
    on_site = CurrentSiteManager()
Вернуться на верх