我有一个活动注册页面,参与者可以在注册时插入详细信息。然后在视图中我尝试显示他们的姓名、标题和详细信息的列表。我一直试图让详细信息字段显示(如果有参与者的话)。谢谢你。
######## Model - Events ########
class Event(models.Model):
Event_ID = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
Event_Description = RichTextField(null=True, blank=True)
Event_Category = models.ForeignKey(EventCategories, default=1, on_delete=models.CASCADE)
Event_participants = models.ManyToManyField(User, blank=True, related_name='events')
def __str__(self):
return self.Event_Name
######## Model - Events ########
class Submission(models.Model):
participant = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name="submissions")
event = models.ForeignKey(Event, on_delete=models.SET_NULL, null=True)
details = models.TextField(null=True, blank=False)
id = models.UUIDField(default=uuid.uuid4, unique=True,primary_key=True, editable=False)
def __str__(self):
return str(self.event) + ' --- ' + str(self.participant)
######## View ########
def single_event(request, pk):
try:
event = Event.objects.get(Event_ID=pk)
submitted = Submission.objects.filter(event=event)
submitted = list(submitted.values('participant','details'))
except:
return render(request, 'events/single-event.html', {"success":True,}, status=200)
context = {'events':Event.objects.filter(Event_ID=pk), 'event':event, 'submitted':submitted}
return render(request, 'events/single-event.html', context)
######## Template - single-event.html ########
{% for event in events %}
{% for user in event.Event_participants.all %}
<tr>
<td>{{ user.profile.title }}</td>
<td>{{ user.first_name }} {{ user.last_name }}</td>
<td>{{ ??????????? }}</td> #This is where i need help. I would like to display 'details' from the Submission model here
</tr>
{% endfor %}
{% endfor %}
在您的代码中,传递上下文的方式没有特别意义
'events':Event.objects.filter(Event_ID=pk), 'event':event
Django ORM
get()
方法总是期望给你 1 个结果,如果结果超过 1 个,则会出错。所以不确定你对这里的活动和活动有什么想法。如果您期望具有相同事件 id 的值超过 1 个,请使用 filter()
,否则使用 get()
尝试这样:
def single_event(request, pk):
try:
event = Event.objects.get(Event_ID=pk) #Should get only 1 results according to your model
submissions = Submission.objects.filter(event=event).select_related('participant')
submitted_details = {submission.participant.id: submission.details for submission in submissions}
except Event.DoesNotExist:
# When the event does not exist
return render(request, 'events/single-event.html', {"success": False}, status=404)
context = {
'event': event,
'submitted_details': submitted_details,
}
return render(request, 'events/single-event.html', context)
在您的模板文件中进行如下调整:
{% for user in event.Event_participants.all %}
<tr>
<td>{{ user.profile.title }}</td>
<td>{{ user.first_name }} {{ user.last_name }}</td>
<td>{{ submitted_details|default:user.id:"No details submitted." }}</td>
</tr>
{% endfor %}