Как получить id элемента с помощью foreignkey в файле admin.py

У меня вопрос. Могу ли я передать данные для фильтрации другого поля (manytomany) в admin.py? Мне нужно получить связанное значение id foreignkey.

Models.py

class Pansions(models.Model):
......
    category = models.ForeignKey(Category, null=True, on_delete=models.PROTECT, related_name='cards', verbose_name='Category')
......

Admin.py

class PansionatAdmin(admin.ModelAdmin):
.....
fields = ('title', 'slug', 'category', 'tags')
....

def formfield_for_manytomany(self, db_field, request, **kwargs):
   if db_field.name == "tags":
      kwargs["queryset"] = Tag.objects.filter(category__id = "GET ID FOREIGNKEY_FIELD (caterogy)")
   return super().formfield_for_manytomany(db_field, request, **kwargs)

Я пытаюсь получить данные из models.py, но этого не происходит. Возможно ли это?

Вот ответ на похожий вопрос, который должен помочь: https://stackoverflow.com/a/61579287/9638991. Для вашего случая это будет выглядеть следующим образом (непроверенный код):


class PansionatAdmin(admin.ModelAdmin):
    .....
    fields = ('title', 'slug', 'category', 'tags')
    ....

    def formfield_for_manytomany(self, db_field, request, **kwargs):
        if db_field.name == "tags" and hasattr(request, ‘pansion_obj’):
            kwargs["queryset"] = Tag.objects.filter(category=request.pansion_obj.category)
        return super().formfield_for_manytomany(db_field, request, **kwargs)

    def get_object(self, request, object_id, from_field=None):
        obj = super().get_object(request, object_id, from_field=from_field)
        # Cache object for use in formfield_for_manytomany
        request.pansion_obj = obj
        return obj
Вернуться на верх