Python Django-获取没有任何相关对象的对象

Python Django-获取没有任何相关对象的对象,python,mysql,django,Python,Mysql,Django,这可能是重复的 因此,我: class User(models.Model): school = models.ForeignKey(School) email = models.EmailField(max_length=254) password = models.CharField(max_length=128) firstname = models.CharField(max_length=50) surname = models.CharFiel

这可能是重复的

因此,我:

class User(models.Model):
    school = models.ForeignKey(School)
    email = models.EmailField(max_length=254)
    password = models.CharField(max_length=128)
    firstname = models.CharField(max_length=50)
    surname = models.CharField(max_length=50)
    middlenames = models.CharField(max_length=100, blank=True)
    utype = models.CharField(max_length=1, choices=(('a','Administrator'),('t','Staff'),('s','Student')))
    lastlogin = models.DateTimeField(null=True)
    active = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)

class Staff(User):
    # Some methods

class Student(User):
    form = models.CharField(max_length=20)
    parentemail = models.EmailField(max_length=254)
    parentphone = models.CharField(max_length=20)

class Placement(models.Model):
    student = models.ForeignKey(Student)
    email = models.EmailField(max_length=254)
    name = models.CharField(max_length=100)
    company = models.CharField(max_length=100)
    position = models.CharField(max_length=50)
    house = models.CharField(max_length=50)
    street = models.CharField(max_length=50)
    town = models.CharField(max_length=50)
    county = models.CharField(max_length=50)
    postcode = models.CharField(max_length=8)
    phone = models.CharField(max_length=20)
    length = models.IntegerField(null=True)
    category = models.CharField(max_length=50)
    date = models.DateField(null=True)
    state = models.CharField(max_length=1, choices=(('A','In progress'),('B','Confirmed'),('C','Completed')))
    created = models.DateTimeField(auto_now_add=True)

class Visit(models.Model):
    placement = models.ForeignKey(Placement)
    staff = models.ForeignKey(Staff)
    date = models.DateField(null=True)
    feedback = models.CharField(max_length=1000)
    confirmed = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)
我想检索所有没有任何访问(并且该学生属于特定学校)的位置

我的观点

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)
这是我到目前为止还没有看到的其他问题,但它似乎不起作用

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

如果我在Visit中为placement字段指定了相关名称,则它会起作用。为什么不访问集合?

您需要使用
访问集合
来引用反向关系,因为它是一对多关系

no_visits = Placement.objects.filter(student__school=school_object, visit_set=None) 
或者如果您要指定一个好的相关名称

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

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

您确定
visit
是反向查找字段的名称吗?你可能想读一读关于这个的Django文档。(出于这个原因,我总是指定一个相反的名字——我通常不喜欢Django挑选的名字)不,这不是哈哈。我在看其他一些,我想我只是用了普通的名字,而不是像你说的那样指定。不完全是。我已经添加了我认为相关的所有代码。