2

感谢您检查这一点。

我的愚蠢怀疑:

我在 Django 中定义了以下模型:

class School(models.Model):
    name = models.CharField(max_length=256)
    principal = models.CharField(max_length=256)
    location = models.CharField(max_length=256)

    def __str__(self):
        return self.name

class Student(models.Model):
    name = models.CharField(max_length=256)
    age = models.PositiveIntegerField() # positive integer only accepts positives
    school = models.ForeignKey("School", related_name='students', on_delete=models.CASCADE)

    def __str__(self):
        return self.name

我的问题是:Django 如何知道选择 School.name 字段作为外键学校的匹配项?当我在管理页面上查看并添加学生时,我可以选择学校的名称(作为外键)。姓名:年龄:学校=(下拉学校名称)

是元素的顺序还是其他?

再次感谢!

4

1 回答 1

2

它没有,它默认使用主键。它呈现学校,self.name因为那是__str__回报

因此,例如,如果您创建一个ModelChoiceField,那么它将呈现如下所示的 HTML:

<select name="school">
    <option value="1">Name of School 1</option>
    <option value="2">Name of School 2</option>
    <option value="3">Name of School 3</option>
</select>

因此,当您提交表单时,Django 会检索主键。获得,Name of School 1是因为它在模型对象上调用str(…)[Python-doc] 。如果您指定了它,这将依次调用__str__,并且 的结果__str__将用于渲染学校。但例如在 URL、表单等中,主键用于从数据库中检索数据。

于 2020-05-19T18:29:41.293 回答