【问题标题】:I can't filter fields in model (Django)我无法过滤模型中的字段(Django)
【发布时间】:2021-10-29 12:44:30
【问题描述】:

我有模型(删除了所有不必要的):

class Contract(models.Model):
    contract_number = models.IntegerField(primary_key=True)
    student = models.ForeignKey('Student', on_delete=models.CASCADE)
    lessons = models.ManyToManyField('Lesson')
class Student(models.Model):
    name = models.CharField(max_length=150)
    age = models.IntegerField()

class Lesson(models.Model):
    lesson_time = models.TimeField(verbose_name='Время урока')
    lesson_date = models.DateField(verbose_name="Дата урока")
    is_done = models.BooleanField(verbose_name="Проведен")

在我的 HTML 中,我使用了特殊链接:

<a href="{%url 'stud_detail' id=student.id%}">

导致urls.py中的URL:

path('student/<int:id>', views.one_student, name='stud_detail')

还有我的观点(再次删除所有其他模型):

def one_student(request, id):
    student = Student.objects.get(id=id)
    contracts = Contract.objects.filter(student=id)
    lessons = Lesson.objects.filter(id__in=contract)
    print(lessons)

    content = dict(student=student,
                   contracts=contracts,
                   lessons=lessons)

    return render(request, 'studbase/student_detail.html', content)

现在我的合同中有 10 节课,但根据过滤结果,我只有一节。 print(lessons) 只返回 1 节课而不是 10 节课。

我做错了什么?

【问题讨论】:

    标签: python python-3.x django django-models filtering


    【解决方案1】:

    您正在过滤Lessons,以便主键以某种方式与Contracts 的id 对应,但这没有多大意义。

    您可以使用以下方式过滤:

    lessons = Lesson.objects.filter(<strong>contract__in=contracts</strong>)

    【讨论】:

    • 谢谢,它成功了))稍微更正一点是lesson__in=contracts,但它终于成功了)
    • @RomTurino:这可能是因为您设置了related_name='lesson'?
    猜你喜欢
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 2015-03-25
    相关资源
    最近更新 更多