Как удалить специальные данные из базы данных с помощью python django - PullRequest
1 голос
/ 14 июля 2020

Например, у меня есть таблица с именем BlackList в базе данных, которая выглядит так:

введите описание изображения здесь

и модель таблицы:

class BlackList(models.Model):
    list = models.CharField(max_length=1000, null=True, blank=True)

Я пытаюсь сделать следующее:

if request.method == "POST":
    username = request.POST.get('username')  # Get username input first
    password = request.POST.get('password')
    user = authenticate(request, username=username, password=password)
    BL = BlackList.objects.values_list('list', flat=True) # Read all data into array
    if username in BL:  # Check if the username is in blacklist
       # Remove this username from the BlackList table

Итак, мой вопрос заключается в том, как удалить специальные данные для особого, например, если «aaa» попытается войти в систему, то «aaa» будет удалено или удалено из таблицы черного списка.

Ответы [ 2 ]

2 голосов
/ 14 июля 2020

Вы можете использовать filter() в сочетании с first(), чтобы получить существующее имя пользователя:

blacklist = Blacklist.objects.filter(username=username).first()

(Это вернет None, если совпадений нет. Если вы используете get(), вместо этого вы получите ошибку DoesNotExist - что нежелательно.)

После этого вы можете просто удалить его:

blacklist.delete()

Это займет 2 запроса (получить и удалить) для достижения вашей цели.

Альтернативный способ - удалить его без получения объекта:

Blacklist.objects.filter(username=username).delete()

Этот оператор будет выполнен только с одним запросом, который равен DELETE FROM ... WHERE username='username'

2 голосов
/ 14 июля 2020

Есть способ .delete. I. e. попробуйте это:

if BlackList.filter(list=username).exists(): 
    BlackList.objects.get(list=username).delete() 

вместо:

BL = BlackList.objects.values_list('list', flat=True) # Read all data into array 
if username in BL: # Check if the username is in blacklist 
    # Remove this username from the BlackList table

Подробнее об этом можно узнать на https://docs.djangoproject.com/en/3.0/topics/db/queries/#deleting -объектах и https://docs.djangoproject.com/en/3.0/ref/models/querysets/#exists

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...