Django display crossed tables

I have an event signup page where the participant insert's details upon signing up. Then in a view I am trying to display a listing of their name, title, and details. I am stuck trying to get the details field to display if there were any for the participant. Thank you.

######## 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 %}

In your code how you are passing context doesn't makes sense specially 'events':Event.objects.filter(Event_ID=pk), 'event':event

Django ORM get() method will always expect to give you 1 results if there are more than 1 results it will give an error. So not sure what is your idea here for events and event. If you expect more than 1 value with same event id then use filter() otherwise use get()

Try it like this:

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)

In your template file adjust like below:

{% 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 %}
Back to Top