Как обновлять через модель в django многие ко многим?

class Blog():
  likes = models.ManyToManyField(User, through="myapp.Like")

class Like():
  user = models.ForeignKey(Like)
  blog = models.ForeignKey(Blog)
  liked_at = models.DateTimeField(auto_now_add=True)
  some_bool_field = models.BooleanField(default=False)

Теперь в просмотрах:

 def like_blog(request, id):
     blog = Blog.objects.get(id=id)
     blog.users.add(request.user)
     # now how can I update some_bool_field and How can I make use of this field 

В будущем я могу использовать какой-нибудь запрос, например blog.users.filter(some_bool_field=False), поэтому для этого случая я хочу обновить это поле.

Если вы хотите обновить сквозные объекты модели, вы можете сделать так:

def like_blog(request, id):
     blog = Blog.objects.get(id=id)
     blog.users.add(request.user)
     # query your through model
     Like.objects.filter(user=request.user, blog=blog).update(some_bool_field=True)

Получение всеми блогами фильтрованных лайков с помощью some_bool_field=True:

true_boolean_likes = Blog.objects.filter(likes__some_bool_field=True)

для сквозного обновления модели вы можете использовать приведенный ниже метод для обновления

like = Blog.objects.get(id=id)
for like in Likes.objects.filter(likes__some_bool_field =False): #or true by what you want to filter
    like.the_field_want_to_update.update(id=like.id)

здесь .update обновите значение, по которому вы фильтруете здесь id так, чтобы оно обновило данные, переданные ему.

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