Как использовать строковые значения переменной в качестве запросов модели django?

У меня есть некоторые поля модели, которые связаны с моделью пользователя отношениями "многие ко многим"

class SocialPost(models.Model):
    user=models.ForeignKey(User,on_delete=models.CASCADE, related_name='users_post' )
    privacy=models.CharField(max_length=100,blank=True, null= True)
    post_text=models.TextField(blank=True, null= True)
    location=models.CharField(max_length=100,blank=True, null= True)
    feeling_or_activity=models.CharField(max_length=100,blank=True, null= True)
    created_at=models.DateTimeField(auto_now_add=True)
    updated_at=models.DateTimeField(blank=True,null=True)
    category=models.CharField(max_length=100,blank=True, null= True)
    tags=models.ManyToManyField(User, related_name='taglist',blank=True)
    views = models.ManyToManyField(User, related_name='post_views',blank=True)
    likes = models.ManyToManyField(User,related_name='post_likes',blank=True)
    love=models.ManyToManyField(User,related_name='post_loves',blank=True)
    angry=models.ManyToManyField(User,related_name='post_angries',blank=True)
    haha=models.ManyToManyField(User,related_name='post_hahas',blank=True)
    sad=models.ManyToManyField(User,related_name='post_sads',blank=True)
    care=models.ManyToManyField(User,related_name='post_cares',blank=True)
    senti=models.ManyToManyField(User,related_name='post_senties',blank=True)
    wow=models.ManyToManyField(User,related_name='post_wows',blank=True)

Я получу значения типа reaction='wow' через вызов API. Я хочу вызвать значения типа variable=object.reaction.filter() Который будет всегда вызываться по значению переменных реакции. например, если reaction='like' это вызовет variable=object.like.all() а если реакция='грустно' будет вызывать variable=object.sad.all()

я не знаю, как я могу это сделать! может ли кто-нибудь помочь мне в этой проблеме?

Используйте getattr.

Возвращает значение именованного атрибута объекта. имя должно быть строкой.

Если это ваш вход:

reaction = 'sad'

А это ваш SocialPost экземпляр:

obj = SocialPost(...)  # Avoid using "object" as a variable name because it is a Python keyword

Затем вы можете перечислить все связанные User записи:

reacted_users = getattr(obj, reaction).all()  # Equivalent to <obj.sad.all()>

Если у вас нет валидации поля reaction, вас может заинтересовать hasattr, например hasattr(obj, reaction), чтобы проверить, является ли значение распознанным атрибутом SocialPost.

Вернуться на верх