Django - Get objects which do NOT have any related objects

django, mysql, python

Solution

You need to use `visit_set` to reference the reverse relation since it's one to many

no_visits = Placement.objects.filter(student__school=school_object, visit_set=None) 

or if you were to specify a nice related name...

class Visit(models.Model):
    placement = models.ForeignKey(Placement, related_name='visits')
    ...

no_visits = Placement.objects.filter(student__school=school_object, visits=None) 

Problem

This may be a duplicate. So I have: ``` class User(models.Model): school = models.ForeignKey(School) class Staff(User): ... class Student(User): ... class Placement(models.Model): student = models.ForeignKey(Student) class Visit(models.Model): placement = models.ForeignKey(Placement) staff = models.ForeignKey(Staff) ``` And I want to retrieve all Placements which do not have any Visits (and the Student belongs to a particular School). My views ``` def placements(request): if request.session['utype'] == 't': context['user'] = Staff.objects.get(pk=request.session['user']) if request.method == 'POST': placements = context['placements'] = Placement.objects.filter(student__school=school) for choice in visits: placement = Placement.objects.get(pk=choice) visit = placement.NewVisit(user, placement.date, '', False) visit.save() return redirect('workxp:visits') else: context['placements'] = Placement.objects.filter(student__school=school, visit_set=None) return render(request, 'workxp/staff/placements.html', context) ``` This is what I have so far from looking at other questions, but it doesn't seem to work... ``` no_visits = Placement.objects.filter(student__school=school_object, visit_set=None) ``` If I give a related name to the placement field in Visit, it works. Why not visit_set?

Original source