У меня проблема с настройкой первичного ключа для представления списка - PullRequest
0 голосов
/ 08 октября 2019

Я получаю сообщение об ошибке: - Обратный для 'grievant_complaint_list' с аргументами ключевого слова '{' pk ':' '}' не найден. Попробован 1 шаблон (ов): ['grievant_complaint_list / (? P [0-9] +) / $']

Я пытаюсь предоставить список жалоб, опубликованных конкретным пользователем, на основе пользователявошел в систему, но возникли проблемы с предоставлением первичного ключа. PS Я новичок в django

views.py

@method_decorator([login_required, grievant_required], name='dispatch')
class GrievantComplaintListView(ListView):
  login_url = '/login/'
  model = Complaint

  def get_queryset(self):
    grievant = Grievant.objects.get(student=self.request.user)
    return Complaint.objects.filter(grievant=grievant)


@method_decorator([login_required, grievant_required], name='dispatch')
class CreateComplaintView(CreateView):
  login_url = '/login/'
  redirect_field_name = 'complaint_detail.html'

  form_class = ComplaintForm

  model = Complaint

  def set_grievant(self):
    form.save(commit=False)
    person = Grievant.objects.get(Registeration=self.request.user)
    Complaint.grievant = person
    form.save()


class ComplaintDetailView(LoginRequiredMixin,DetailView):
    login_url = '/login/'
    model = Complaint

@method_decorator([login_required, grievant_required],name='dispatch')
class StudentView(TemplateView):
template_name = 'student_view.html'

models.py

class Grievant(models.Model):
  student = models.OneToOneField(User,on_delete=models.CASCADE,primary_key=True)
  Registeration = models.IntegerField(default=0000)
  Room = models.CharField(max_length=50)
  Hostel = models.CharField(max_length=100)

  def __str__(self):
     return self.Registeration`

class Complaint(models.Model):
grievant = models.ForeignKey('grievance_app.Grievant',on_delete=models.CASCADE,related_name='complaintee',primary_key=True)
department = models.ForeignKey('grievance_app.Department',on_delete=models.CASCADE)
text = models.TextField()
heading = models.CharField(max_length=200,blank=False,null=False,default='Problem')
media = models.ImageField(upload_to='media')
created_date = models.DateTimeField(default=timezone.now())
status_choices = [('D','Done'),('P','Pending'),('N','Not Accepted')]
status = models.CharField(choices=status_choices,max_length=1,default='N')

class Meta():
    verbose_name_plural = 'Complaints'

def change_status(self,choice):
    self.status = choice
    self.save()

def __str__(self):
    return self.heading

def get_absolute_url(self):
    return reverse("complaint_detail",kwargs={'pk':self.pk})

forms.py

class ComplaintForm(forms.ModelForm):

class Meta():
    model = Complaint
    fields = ('department','heading','text','media')

urls. py

path('student_view/',views.StudentView.as_view(),name='student_view'),
path('grievant_complaint_list/<int:pk>/',views.GrievantComplaintListView.as_view(),name='grievant_complaint_list'),
path('complaint/new/',views.CreateComplaintView.as_view(),name='create_complaint'),
path('complaint_detail/<int:pk>/',views.ComplaintDetailView.as_view(),name='complaint_detail')

student_view.html

{% extends 'base.html' %}

{% block title %} StudentView {% endblock %}

{% block body_block %}
<h1>You are a student</h1>
<p>
<a class="btn btn-primary btn-large" href="{% url 'grievant_complaint_list' pk=grievant.pk %}">View Complaint List</a>
<a class="btn btn-success btn-large" href="{% url 'create_complaint' %}">File Complaint</a>
</p>
{% endblock %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...