Как удалить запись, только если отправленный пользователь является зарегистрированным пользователем

#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}} ? @AreebaAkhtar

3. он вернул имя пользователя

4. имя пользователя текущего зарегистрированного пользователя / преподавателя

Ответ №2:

Ваши модели немного «нетрадиционны».

Однако это должно сработать:

 {% if announcement.teacher.user == request.user %}
    ...
{% endif %}   
 

Комментарии:

1. вышеупомянутый способ исчез кнопка удаления для всех объявлений

2. Странно. Можете ли вы подтвердить в базе данных правильность объектов объявлений?