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)