Django - как фильтровать модель по полю внешнего ключа?

У меня есть две модели для категорий, список категорий для всех пользователей (каждая уникальна) и список связей между пользователем и категорией.

# category/models.py

class CategoryList(models.Model):
    name = models.TextField(unique=True, max_length=60, verbose_name='Category name')

    def __str__(self):
        return f'{self.name}'


class UserCategories(models.Model):
    category = models.ForeignKey(CategoryList, on_delete=models.deletion.CASCADE, verbose_name='User's categories')
    user = models.ForeignKey(User, on_delete=models.deletion.CASCADE, verbose_name='User')

    def __str__(self):
        return f'{self.category.name}'

Также у меня есть транзакции

# transactions/models.py

class Transaction(models.Model):
    user = models.ForeignKey(User, on_delete=models.deletion.CASCADE, verbose_name='Transaction from')
    payment_amount = models.DecimalField(default=0, decimal_places=2, max_digits=20, verbose_name='Payment amount')
    date = models.DateField(auto_now=True, verbose_name='Date')
    time = models.TimeField(auto_now=True, verbose_name='Time')
    category = models.ForeignKey(UserCategories, null=True, on_delete=models.deletion.SET_NULL, verbose_name='Category')
    organization = models.TextField(max_length=60, verbose_name='Organization')
    description = models.TextField(max_length=300, null=True, blank=True, verbose_name='Transaction discription')

У меня есть следующий выпуск:

Я использую DRF для выполнения CRUD операций с транзакциями, и когда я пытаюсь добавить транзакцию (она выбирает текущего авторизованного пользователя) или обновить ее, я получаю все категории в поле

category = models. ForeignKey(UserCategories...)

и это не то, что мне нужно. Насколько я могу судить, выбор модели на иностранном языке аналогичен выбору модели на английском.ForeignKey (UserCategories.objects.all()), но это не то, что мне нужно... Мне нужно что-то вроде фильтрации; при создании или обновлении транзакций, он должен показывать мне только список категорий для моего текущего пользователя, а не все! Мне нужен конечный результат типа "category = models." ForeignKey(UserCategories.objects.filter(user=user)), но я не уверен (и не нашел ответа в документации), как отфильтровать только категории для моего текущего пользователя.

Djoser также используется для регистрации и аутентификации пользователей. Это является обязательным. Я пытался добавить поле ManyToMany для моего пользовательского пользователя, но чтобы выбор категории работал, мне нужно добавить специальный сериализатор и добавить его в базовую функцию "user_create", как category = CategorySerializer(many=True), но я не могу. Djoser находится в моем venv, и это не лучшее решение - вносить изменения в чужую lib.

В принципе, в Django при фильтрации с внешним ключом вам нужно передать полный объект связанной модели, который вы можете передать в views.py следующим образом...

get_category = CategoryList.objects.get(id=id)

UserCategories.objects.filter(category=get_category)


# ------------------- OR ------------------


get_category = CategoryList.objects.get(id=id)
UserCategories.objects.filter(category__id=get_category.id)
Вернуться на верх