类通用DeleteView不适用于与模型相关的模型

时间:2019-10-14 17:05:40

标签: django

我有一个页面,其中包含作业问题。 与任务相关的问题会在任务详细信息页面上显示,并带有EDIT和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)])

The Assignment detail page with questions associated with it

1 个答案:

答案 0 :(得分:0)

我对代码做了一些更改,并添加了一个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})