Как обновлять через модель в 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
так, чтобы оно обновило данные, переданные ему.