Django admin - при добавлении модели ограничивать foreignkey, принадлежащие текущему пользователю

В моем приложении есть две модели. Каждая модель имеет внешний ключ к пользователю, и эти две модели также связаны через внешний ключ. Я хочу использовать админку django для добавления новых объектов для модели. Страница add_view дает мне выпадающий список для выбора поля foreignkey, но я хочу ограничить этот выбор текущим пользователем.

models.py

class Notebook(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             on_delete=models.CASCADE)
    name = models.CharField(max_length=20)

class Post(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             on_delete=models.CASCADE)
    entry = models.CharField(max_length=500)
    notebook = models.ForeignKey(Notebook, on_delete=models.CASCADE)

Когда я нахожусь в админке и нажимаю добавить новый пост, я хочу выбрать из блокнотов, которые принадлежат только мне. Я вижу все блокноты в выпадающем списке (я вошел как администратор с правами суперпользователя).

Вы можете определить limit_choices_to в ModelAdmin:

class MyModelAdmin(ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == 'user':
            kwargs['limit_choices_to'] = {'user': request.user}
        return super().formfield_for_foreignkey(db_field, request, **kwargs)
Вернуться на верх