Django: заполнить поле формы массивом javascript - PullRequest
0 голосов
/ 05 июня 2018

У меня есть шаблон, где я размещаю некоторые изображения и комментарии, связанные с изображением.

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

Вопрос: Как определить значение поля формы с помощью Javascript?

Пример идиота: {{ form.field1.value }} = jsArray[0]

Дополнительный пример:

HTML

<button onclick="setImage()">Fill image value</button>

<form method="post" novalidate>
    {% csrf_token %}
    <input type="text" name="image" id="id_image" value="" maxlength="30" readonly>
    <input type="hidden" name="user" id="id_user" {% if form.user.value != None %}value="{{ form.user.value|stringformat:'s' }}"{% endif %} maxlength="30" readonly>
    {{ form.text }}
    <button type="submit">Submit</button>
</form>

JS

  function setImage() {
      document.getElementById("id_image").value = imageObjectTable[0];
      //imageObjectTable[0] is one object of the model "ImageModel"
  }

Django - модели.py

    class ImageModel(models.Model):
# Create your models here.
    user = models.ForeignKey(UserModel, on_delete=models.CASCADE, null=True)
    image = models.ImageField(('image'),
                              max_length=IMAGE_FIELD_MAX_LENGTH,
                              upload_to='.')
    date_taken = models.DateTimeField(('date taken'),
                                      null=True,
                                      blank=True,
                                      help_text=('Date image was taken; is obtained from the image EXIF data.'))


class Comment(models.Model):
    image = models.ForeignKey(ImageModel, related_name='comments', on_delete=models.CASCADE)
    user = models.ForeignKey(UserModel, on_delete=models.CASCADE, null=True)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    approved_comment = models.BooleanField(default=False)

Django - Forms.py

class CommentForm(forms.ModelForm):

    class Meta:
        model = Comment
        fields = ('user','image', 'text', )

=> Когда я запускаю функцию setSmage JS, значение хорошо заполняется в HTML, но когда я отправляю форму, это не работает: (

Большое спасибо за вашу помощь:)

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Я нашел решение ...: ожидаемое значение в форме django не является ни строкой, ни объектом, но целым числом, которое связывает позицию выбора (начиная с 1, потому что 0 - неопределенный выбор).

Итак, мой первый код:

 document.getElementById("id_image").value = imageObjectTable[0];

Версия, которая работает:

 document.getElementById("id_image").value = 1;

Спасибо за вашу помощь!

0 голосов
/ 05 июня 2018

Я полагаю, потому что вы хотите заполнить переменную Django, она вам нужна во внутреннем интерфейсе после отправки формы?

В этом случае обычно вы заполняете значение поля формы HTML с помощьюJavascript и позвольте отправке вашей формы обработать все остальное.

Вы можете получить идентификатор поля (при условии, что вы не создали HTML-код вручную) с помощью {{ form.field1.auto_id }}

Затем используйте идентификатор длявыберите документ по идентификатору или используйте селектор запросов JS DOM, чтобы предварительно ввести желаемое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...