Как изменить поле в сгенерированной ModelForm HTML-форме? - PullRequest
0 голосов
/ 18 ноября 2018

Я делаю одно из моих первых приложений django с базой данных sqlite. У меня есть несколько моделей, например:

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']

И на моем сайте, в URL для добавления нового Соединения, у меня есть каскадный список, содержащий RouteID. И я бы хотел, чтобы он содержал RouteName, а не ID, чтобы было легче выбирать. Как я должен изменить свой ConnectionForm, чтобы я мог все еще использовать внешний ключ для таблицы маршрутов, но увидеть RouteName вместо RouteID?

На данный момент это выглядит так , но я бы хотел иметь список RouteNames, добавив в таблицу соединений хороший внешний ключ, RouteID

1 Ответ

0 голосов
/ 18 ноября 2018

Обновите метод __str__ модели маршрута:

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

def __str__(self):
   return self.name

Поскольку метод __str__() вызывается всякий раз, когда вы вызываете str () для объекта.Django использует str (obj) во многих местах, например в Modelform.По умолчанию он возвращает id или pk, поэтому вы видели идентификаторы в форме модели.Таким образом, переопределив его с помощью name, вы увидите, что имена появляются в поле выбора.Пожалуйста, смотрите документацию для более подробной информации по этому вопросу.

...