#django
#django
Вопрос:
У меня есть несколько пользователей в моем проекте, мой models.py файл является
class User(AbstractUser):
is_student = models.BooleanField(default=False)
is_teacher = models.BooleanField(default=False)
class Teacher(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE,primary_key=True,related_name='Teacher')
name = models.CharField(max_length=250)
subject_name = models.CharField(max_length=250)
email = models.EmailField(max_length=254)
phone = models.IntegerField()
teacher_profile_pic = models.ImageField(upload_to="classroom/teacher_profile_pic",blank=True)
def __str__(self):
return self.name
class Announcement(models.Model):
title = models.CharField(max_length=30)
content = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
def __str__(self):
return self.title
Если зарегистрированный пользователь является учителем, разрешено создавать объявление
Теперь я хочу, чтобы только учитель, опубликовавший объявление, мог видеть кнопку удаления
Мой HTML-файл
{% extends "classroom/base.html" %}
{% block content %}
<h1>Announcements</h1>
{% for announcement in announcements %}
<!-- starting loop (posts is keyword from view) -->
<div style="border-style: solid;">
{% if object.teacher.id == request.teacher %}
<div>
<a href="{% url 'classroom:opt' %}">Delete</a>
</div>
{% endif %}
<a class="mr-2">Posted by: {{ announcement.teacher }}</a>
<h2><a class="article-title">{{ announcement.title }}</a></h2>
<p class="article-content">{{ announcement.content}}</p>
</div>
{% endfor %}
{% endblock content %}
предполагается if statement
, что значение true, если зарегистрированным учителем является учитель, который изначально его опубликовал. Однако кнопка удаления видна для каждого объявления
мой views.py имеет
class AnnouncementListView(ListView):
context = {
'announcements' : Announcement.objects.all()
}
model = Announcement
template_name = 'classroom/all_announcements.html'
context_object_name = 'announcements'
Комментарии:
1. Это может сработать
object.teacher.id == request.user.Teacher.id
.. Я полагаю, что у объекта Requestt нет объекта teacher.2. он включил кнопку удаления для всех объявлений
Ответ №1:
Попробуйте использовать это.
{% if announcement.teacher.user == request.user %}
<div>
<a href="{% url 'classroom:opt' %}">Delete</a>
</div>
{% endif %}
Комментарии:
1. таким образом, исчезла кнопка удаления для всех объявлений
2. Попробуйте, что это даст
{{announcement.teacher.user}}
? @AreebaAkhtar3. он вернул имя пользователя
4. имя пользователя текущего зарегистрированного пользователя / преподавателя
Ответ №2:
Ваши модели немного «нетрадиционны».
Однако это должно сработать:
{% if announcement.teacher.user == request.user %}
...
{% endif %}
Комментарии:
1. вышеупомянутый способ исчез кнопка удаления для всех объявлений
2. Странно. Можете ли вы подтвердить в базе данных правильность объектов объявлений?