感谢您对此进行检查。
我的疑惑:
我在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字段作为外键学校的匹配项?当我在“管理”页面上检查并添加学生时,我可以选择学校的名称(作为外键)。名称:年龄:学校=(下拉列表中的学校名称)
是元素顺序还是其他?
再次感谢!
它没有,默认情况下它使用主键。它用self.name
赋予学校[[renders,因为这是__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__
的结果将用于render学校。但是例如在URL,表单等中,主键用于从数据库中检索数据。