#python #django #django-models #django-views
Вопрос:
Я создаю приложение для блога, и я пытаюсь заставить всех пользователей, логическое поле профиля которых соответствует действительности.
То, что я пытаюсь сделать:-
Я создал функцию для пользователей, которые запрещены, и я создал логическое поле для каждого пользователя, И я пытаюсь получить всех пользователей, у которых есть логическое значение профиля True
.
models.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE,default='',unique=True)
block_users = models.BooleanField(choices=BLOCK_CHOISES,default=False)
Проблема
def block_users(request):
profile = request.user.profile
blocked = Profile.objects.filter(block_users=profile.block_users)
context = {'blocked':blocked}
return render(request, 'blocked.html', context)
Когда я запускаю этот код, он показывает мне только пользователя, значение которого равно False
. НО я хочу, чтобы пользователи имели такую ценность True
.
Я понятия не имею, как его получить.
заранее спасибо.
Любая помощь будет признательна.
Ответ №1:
Похоже, вы пытаетесь перечислить пользователей в соответствии с зарегистрированным пользователем. Я имею в виду, что если зарегистрированный пользователь заблокирован, в нем будут перечислены заблокированные пользователи, а если нет, то будут перечислены не заблокированные пользователи.
вместо этого: В вашем models.py, создайте связанное имя
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="profile_user",unique=True)
block_users = models.BooleanField(choices=BLOCK_CHOISES,default=False)
В views.py, когда вы сделаете «запрос.user.profile_user.block_users», это даст зарегистрированным пользователям статус блокировки.
Теперь, если вы хотите, чтобы пользователи были заблокированы, отфильтруйте их напрямую с помощью True.
Profile.objects.filter(block_users=True)
Комментарии:
1. Большое Вам спасибо за ваши усилия. НО вы хотите, чтобы я поставил
request.user.profile_user.block_users
перед этим ?2. Это зависит от тебя. Если вам нужен статус вошедших пользователей и вы хотите использовать его в дальнейшем, вы можете добавить его. Но если вы хотите указать только заблокированного пользователя, фильтрация с помощью True сделает свое дело. Нет необходимости в запросе.user.profile_user.block_users. в этом случае
3. НО я хочу показать заблокированным пользователям, которые заблокированы пользователем, вошедшим в систему.
4. Тогда это будет совершенно другой сценарий. Добавьте в свою модель еще одно поле с именем blocked_by(это поможет вам найти, кто кого заблокировал). Это будет внешний ключ к пользовательской модели. Измените логику того, как вы вставляете в свою модель. Когда вы хотите получить данные, вы можете выполнить: Profile.objects.filter(block_users=True,blocked_by=request.user.profile_user).