передать pk в форму CreateView в django - PullRequest
0 голосов
/ 01 декабря 2019

Я новичок в Django.

У меня есть модель, которая выглядит следующим образом:

models.py

class Intervention(models.Model):
subject = models.CharField(max_length=200)
begin_date = models.DateField(default=datetime.datetime.today)
end_date = models.DateField(default=datetime.datetime.today)
description = models.TextField(blank=True)
speaker = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
campus = models.ForeignKey(Campus, on_delete=models.CASCADE)

class Meta:
    verbose_name = 'Intervention'
    verbose_name_plural = 'Interventions'

def __str__(self):
    return self.subject

class Evaluation(models.Model):
interventions = models.ForeignKey(Intervention, on_delete=models.CASCADE)
student_id = models.CharField(max_length=20)
speaker_knowledge_mark = models.IntegerField(validators=[MaxValueValidator(20), MinValueValidator(0)])
speaker_teaching_mark = models.IntegerField(validators=[MaxValueValidator(20), MinValueValidator(0)])
speaker_answer_mark = models.IntegerField(validators=[MaxValueValidator(20), MinValueValidator(0)])
slide_content_mark = models.IntegerField(validators=[MaxValueValidator(20), MinValueValidator(0)])
slide_examples_mark = models.IntegerField(validators=[MaxValueValidator(20), MinValueValidator(0)])
comment = models.TextField(blank=True)

TheИдея состоит в том, что когда студент заходит на веб-сайт на домашней странице, он должен выбрать кампус, в котором он учится, затем он перенаправляется на страницу, где он видит только интервенции своего кампуса, а затем, когда он выбирает интервенцию, он получает подробную информацию об этом:

Экран домашней страницы

Страница интервенций

Страница подробностей интервалов

Всеработает до сих пор. Теперь на «странице сведений о вмешательстве», когда пользователь нажимает «поставить оценку», он перенаправляется на страницу для создания отметки (я использую класс CreateView), как показано ниже:

создать отметку

Теперь мой вопрос: как я могу заменить Modelchoicefield в сгенерированной форме на pk интервала, в котором студент хочет дать оценку?

Views.py

class CreateEvaluationView(CreateView):
form_class = NewEvaluation
template_name = 'mark.html'
def home(request):
   campus = Campus.objects.all().order_by('-name')
return render(request, 'home.html', {'campus': campus})

def mark(request):
if request.method == 'POST':
    campus = request.POST.get('campus')
    intervention = Intervention.objects.filter(campus=campus)
    return render(request, 'mark.html', {'intervention': intervention})

def intervention_detail(request, pk):
intervention_detail = get_object_or_404(Intervention, pk=pk)
return render(request, 'intervention_detail.html', {'intervention_detail': intervention_detail})

urls.py

    path('', views.home, name='home'),
path('mark/', views.mark, name='mark'),
path('mark/<int:pk>/', views.intervention_detail, name='intervention_detail'),
path('mark/create/', CreateEvaluationView.as_view(template_name="givemark.html"), name='newmark'),
path('intervention/create/', login_required(CreateInterventionView.as_view(template_name="intervention_create.html")), name='create'),
path('intervention/', login_required(ListInterventionView.as_view(template_name="intervention_list.html")), name='list'),

Заранее спасибо за помощь! С наилучшими пожеланиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...