followers_set
может быть получен экземпляром. Поэтому сначала вам нужно получить экземпляр, затем использовать followers_set
с этим экземпляром.
obj = InstagramBot.objects.first() # or some other instance by query.
# then you can use the reverse lookup
obj.followers_set.all() # will get all the objects from Following table.
Теперь остальные вопросы:
1. тот же самый бот не может следовать за собой создать новую функцию / метод (stati c функция или метод менеджера) и проверить, являются ли target_id
и follower_id
одинаковыми условиями.
class Following(models.Model):
# fields
def create_follower(user_id, follower_id):
if user_id == follower_id:
return
Существует множество способов проверить это состояние, используйте тот, который соответствует вашим целям.
2. один и тот же бот не может следовать за другими ботами несколько раз Вы можете использовать UniqueConstraint , чтобы обеспечить уникальное ограничение для 2 столбцов.
class Following(models.Model):
# fields
class Meta:
constraints = [
models.UniqueConstraint(fields=['user', 'follower'], name='unique follower')
]
или Вы можете вызвать validate_unique () из вашего метода сохранения и выполните свой собственный лог c, чтобы проверить, существует ли уже строка с таким же значением.
3. Я хочу получить список всех ботов с количеством подписчиков Для этого вы можете использовать аннотацию.
from django.db.models import Count
data = InstagramBot.objects.annotate(f_count=Count('followers_set'))