如何更改ModelForm生成的html表单中的字段?

时间:2018-11-18 16:04:10

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

我正在使用sqlite数据库制作我的第一个django应用程序之一。我有一些模型,例如:

class Connection(models.Model):
    routeID = models.ForeignKey(Route, on_delete=models.CASCADE)
    activityStatus = models.BooleanField()
    car = models.ForeignKey(Car, on_delete=models.CASCADE)
class Route(models.Model):
     name = models.CharField(max_length=20)

和表格

class RouteForm(ModelForm):
    class Meta:
        model = Route
        fields = ['name']

class ConnectionForm(ModelForm):
    class Meta:
        model = Connection
        fields = ['routeID', 'activityStatus', 'car']

在我的网站中,在用于添加新Connection的URL中,我具有包含RouteID的级联列表。而且我希望它包含RouteName而不是ID,因此选择起来会更容易。我应该如何更改我的ConnectionForm,以便仍然可以使用外键来路由表,但是看到RouteName而不是RouteID?

For now it's looking like this,但我很想拥有RouteNames列表,同时仍向连接表添加良好的外键RouteID

1 个答案:

答案 0 :(得分:0)

更新路由模型的__str__方法:

class Route(models.Model):
 name = models.CharField(max_length=20)

def __str__(self):
   return self.name

因为只要您在对象上调用str(),就会调用__str__()方法。 Django在许多地方(例如在Modelform中)使用str(obj)。默认情况下,它返回idpk,这就是为什么您以模型形式看到id的原因。因此,通过用name覆盖它,您将看到名称出现在选择字段中。有关更多详细信息,请参见documentation