Общий класс DeleteView не работает для модели, связанной с моделью - PullRequest
1 голос
/ 14 октября 2019

У меня есть страница с заданиями. Вопросы, связанные с назначением, отображаются на странице сведений о назначении с тегами привязки EDIT и DELETE. Но после нажатия delete я получаю сообщение об ошибке: для 'CreateQuestion' с обратными аргументами '(' ',)' не найдено. Попробован 1 шаблон (ов): ['assignment / (? P [0-9] +) / createQuestion / $']

views.py

class AssignmentDelete(DeleteView):
    model = Assignment
    template_name = "dashboard/assignment_list.html"
    success_url = reverse_lazy('ViewAssignment')
    def get(self, request, *args, **kwargs):
        return self.delete(request, *args, **kwargs)

class AssignmentDetailView(generic.DetailView):
    model = Assignment
    template_name = "dashboard/assignment_detail.html"

class QuestionDeleteView(DeleteView):
    model = Question
    template_name = 'dashboard/assignment_detail.html'
    def get_success_url(self):
        return reverse_lazy('assignment_detail', kwargs={'pk': self.object.assignment_id})

urls.py

path('<int:assignment_pk>/DeleteQuestion/<int:pk>/delete', views.QuestionDeleteView.as_view(), name='DeleteQuestion'),
path('<int:pk>/createQuestion/', views.QuestionCreate, name='CreateQuestion'),
path('assignment/<int:pk>', views.AssignmentDetailView.as_view(), name='assignment_detail'),

assignment_detail.html

{% extends "./base.html" %}
{% block content %}
  <h1>Course:{{assignment.course }}</h1>

  <p><strong>Assignment:</strong> {{ assignment.number }}</p> 
  <p><strong>publish_date:</strong> {{ assignment.publish_date }}</p>
  <p><strong>deadline:</strong> {{assignment.deadline_date}}</p>
  <div style="margin-left:20px;margin-top:20px">
    <h4>Questions</h4>
    <table class="table">
      <thead class="thead-light">
        <tr>
          <th scope="col">Question Title</th>
          <th scope="col">Question Marks</th>
          <th scope="col">Edit Question</th>
          <th scope="col">Delete Question</th>
        </tr>
      </thead>
      <tbody>
        {% for question in assignment.question_set.all %}
        <tr>
          <td>{{ question.title }}</td>
          <td>{{ question.marks }}</td>
          <td> <a href="{% url 'UpdateQuestion'  assignment.id question.id %}">Edit</a> </td>
          <td> <a onclick="return confirm('Are you sure?');" href="{% url 'DeleteQuestion'  assignment_pk=assignment.id pk=question.id %}">Delete</a></td>
        </tr>
      {% endfor %}
      </tbody>
    </table>

<a class=" btn btn-primary" href="{% url 'CreateQuestion' assignment.id %}">Add Question</a>
  </div>



{% endblock %}
{% block script %}

{% endblock %}

Models.py

class Assignment(models.Model):
    number = models.IntegerField()
    course = models.ForeignKey(Course,on_delete = models.SET_NULL,blank=True,null=True)
    publish_date = models.DateField(auto_now_add = True)
    deadline_date = models.DateField()
    faculty = models.ForeignKey(Faculty,on_delete = models.SET_NULL,blank=True,null=True)

    def __str__(self):
        return f'Assignment {self.number}-{self.course}'

    def get_absolute_url(self):
        """Returns the url to access a detail record for this Assignment."""
        return reverse('assignment-detail', args=[str(self.id)])
class Question(models.Model):
    assignment = models.ForeignKey(Assignment, on_delete=models.SET_NULL,blank=True,null=True)
    username = models.ForeignKey(User,on_delete=models.SET_NULL,blank=True,null=True)
    title = models.CharField(max_length = 200)
    description = models.TextField(blank=True , null = True)
    marks = models.IntegerField(null=True)
    date = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return self.title

    def get_absolute_url(self):
        """Returns the url to access a detail record for this book."""
        return reverse('question-detail', args=[str(self.id)])

Страница сведений о назначении с вопросами, связанными с ней

1 Ответ

0 голосов
/ 15 октября 2019

Я сделал некоторые изменения в своем коде и добавил метод get, и теперь он работает так, как я хотел. Было бы замечательно, если бы кто-то указал на какой-либо риск, связанный с этим. Спасибо всем за ваше время в помощи в моей проблеме

вот ОБНОВЛЕННЫЙ код:

class QuestionDeleteView(DeleteView):
    model = Question
    template_name = "dashboard/assignment_detail.html"
   self.object.assignment_id})
    def get(self, request, *args, **kwargs):
        return self.delete(request, *args, **kwargs)
    def get_success_url(self):
        return reverse_lazy('assignment_detail', kwargs={'pk': self.object.assignment_id})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...