2015-03-21 2 views
1

Я только начал играть с Django, мне это нравится! Я до сих пор работаю свой путь вокруг с Django ORM, хотя ...Django: удаление отношения m2m в объекте

На данный момент у меня есть модель сдвиг с отношениями m2m с пользователями:

class Shift(models.Model): 
    users = models.ManyToManyField(User) 

Я хочу, чтобы определить вид, что проверяет, является ли существует связь M2M, если это так, она удаляет это отношение. Вот где я застрял: я могу искать, если отношения существуют, но я не могу его удалить. Что не так с моим кодом?

def remove_if_exists(request, shift_id, username): 
    shift = get_object_or_404(Shift, pk=shift_id) 
    if shift.users.filter(username=username).exists() 
     shift.users.remove(username) 

ответ

3

Проблема с кодом является то, что отношения не с именем, но с объектом пользователя. Таким образом, ваш вызов remove должен иметь объект User в качестве аргумента. Сначала вам нужно сначала получить соответствующего пользователя из db, а затем удалить его с помощью этого объекта.

Однако есть ярлык: remove не вызывает ошибку, если объект не находится в соответствующем наборе, поэтому вы можете пропустить существующий вызов. Это дает только:

0

Некоторой глупый синтаксис ошибка моих, должно быть:

shift.users.remove(User.objects.get(username=username)) 
Смежные вопросы