我有一个活动的注册表。由于单击事件页面上的“注册”按钮时,此注册表单显示为模式,因此我知道用户想要注册哪个事件。但是Django没有,因为我不知道如何在代码中实现。
我有两个模型:Participant
和Event
。 Participant
的每个实例通过Event
引用一个ForeignKey
实例。如何根据事件页面的提示设置ForeignKey
?
这是我的代码示例:
models.py:
from django.db import models
class Event(models.Model):
name = models.CharField(max_length=50)
description = models.CharField(max_length=500)
#<...>
slug = models.SlugField()
class Participant(models.Model):
name = models.CharField(max_length=200)
email = models.EmailField()
event = models.ForeignKey(Event, on_delete=models.CASCADE)
forms.py:
from django.forms import ModelForm
from .models import Participant
class ParticipantForm(ModelForm):
class Meta:
model = Participant
fields = ['name', 'email']
views.py:
from django.template.loader import render_to_string
from django.views import generic
from .models import *
from .forms import *
class RegistrationView(generic.FormView):
template_name = 'me/registration.html'
form_class = ParticipantForm
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['event'] = Event.objects.get(slug=self.args[0])
return context
def form_valid(self, form):
form.save()
return HttpResponse(render_to_string('me/registration-complete.html', {'event': Event.objects.get(slug=self.args[0])}))
答案 0 :(得分:0)
您需要在form_valid
中进行设置。在这种情况下,get_context_data
不会被调用,因此您需要再次获取该事件。您可能希望将其提取到单独的方法中。
def form_valid(self, form):
form.instance.event = Event.objects.get(reference_name=self.args[0])
form.save()
return ...