Варианты «один ко многим» не отображаются в форме модели Django - PullRequest
0 голосов
/ 08 декабря 2018

Я очень новичок в Django и изо всех сил пытаюсь понять, что мне не хватает в форме модели Django.Я хочу отобразить раскрывающийся список с предопределенными значениями в форме, но по какой-то причине параметры никогда не появляются.Ниже приведен код от models.py

LOAN_STATUS = (
    ('m', 'Maintenance'),
    ('o', 'On loan'),
    ('a', 'Available'),
    ('r', 'Reserved'),
)

class Status (models.Model):
    status = models.CharField(
            max_length=50,
            choices=LOAN_STATUS,
            blank=True,
            default='m',
        )
    class Meta:
        db_table = 'Status'

class Property(models.Model):
   propertyID = models.AutoField(primary_key=True)
   status = models.ForeignKey(Status, on_delete=models.SET_NULL, null=True)

   def __str__(self):
      return self.propertyTitle

Ниже приведен код от ModelForm

class CreateAdvertisementForm(ModelForm):
    class Meta:
        model = Property
        exclude = ['propertyID']
        fields = ('status',)

Ниже приведен код из моего шаблона

{% block body %}
<form method="POST" class="post-form">
    {% csrf_token %}
    {{ form.as_p }}

    <button type="submit" class="save btn btn-default">Save</button>
</form>{% endblock %}

Пожалуйста, помогитеЯ понимаю, что происходит не так.

enter image description here

Ответы [ 3 ]

0 голосов
/ 08 декабря 2018

Попробуйте обновить базу данных,

python manage.py migrate --run-syncdb

, затем выполните миграции и мигрируйте

python manage.py makrmigrations
python manage.py migrate
0 голосов
/ 08 декабря 2018

После дня борьбы у меня наконец-то все заработало.Тем не менее, я действительно не уверен, правильно ли я понимаю.Я закончил тем, что вставил значения в свою базу данных с помощью консоли Python.По моему мнению, Django должен обрабатывать это автоматически, потому что я уже определил все возможные значения в models.py.Что мне здесь не хватает?

0 голосов
/ 08 декабря 2018

Попробуйте указать поле моделей следующим образом, а не в Meta:

class Status (models.Model):
    status = models.CharField(
                max_length=50,
                choices=LOAN_STATUS,
                blank=True,
                default='m',
            )
    class Meta:
        db_table = 'Status'

и увеличьте max_length до числа, которое больше, чем количество символов самого длинного слова в ваших вариантах LOAN_STATUS,Я думаю, что у вас есть проблема, потому что max_length - 1 символ, но все ваши варианты имеют более 1 символа.Возможно, поскольку отображение выбора имеет 1 символ, оно будет работать, но я уверен, что оно проверит второе значение.

Кроме того, я всегда указываю значение полей в своих формах:

class CreateAdvertisementForm(ModelForm):
    class Meta:
        model = Property
        fields = ('status',)

Это говорит точно, какие поля вы хотите визуализировать.Это может показаться излишним, так как в вашей модели только одно поле, это должно быть очевидно, но я думаю, что это лучший способ по соображениям безопасности.Может быть, кто-то еще может дать свой вклад в это.

...