заполнение форм django на основе выбора с данными моделей в качестве исходных данных - PullRequest
0 голосов
/ 07 декабря 2018

Требуется помощь в добавлении полей model class в качестве исходных данных к нашим forms данным.

models.py

class SourceCode(models.Model):
    source_description = models.CharField(max_length=80,unique=True)
    source_urls = ArrayField(ArrayField(models.TextField(blank=True),),blank=True,null=True)
    source_results = JSONField(blank=True,null=True)

    def __str__(self):
        return self.source_description

.py

class SourceForm(forms.Form):
    source_description = forms.ModelChoiceField(queryset=SourceCode.objects.all(),required=True)
    source_form_urls = forms.CharField(widget=forms.Textarea(attrs={'placeholder':'Enter URLS Here'}))

Я создал Source1 объект и добавил https://stackoverflow.com значение в поле source_urls.

enter image description here


Вот как это выглядит:

Как только я выберу Source1 из forms.ModelChoiceField, я хочу, чтобыпоказать source_urls данные поля source_urls на основе выбранного пользователем объекта.

enter image description here

1 Ответ

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

Похоже, нужно решение JavaScript.

Вы можете загрузить все source_urls в шаблоне после установки контекстной переменной под названием 'source_urls' в контексте ваших представлений:

Ваше представление:

class YourViewName():

    def get_context_data(self, **kwargs):
        context_data = super().get_context_data(**kwargs)
        context_data['source_urls'] = SourceCode.objects.values('id', 'source_urls')
        return context_data

В шаблоне:

<script>
    var source_urls = {
        {% for su in source_urls %}
        "{{ su.id }}": "{{ su.source_urls }}",
        {% endfor %}
    }
</script>

Затем добавьте что-нибудь в свой JavaScript:

$('#source_description_id').change(function() {
    $('#source_form_urls_id').val(source_urls[$(this).val()]);
});

Или вы можете создать другое представление, которое ищет source_urls с помощью вызова ajax:

def source_url_searcher(request):

    source_id = request.GET.get('id')
    source_urls = SourceCode.objects.get(id=source_id).source_urls 

    return return JsonResponse({source_urls: source_urls})

И ваш JavaScript:

$('#source_description_id').change(function() {
    $.ajax({
        url: <the_ajax_url>,
        data: {source_id: $(this).val()},
        success: function(response) {
            $('#source_form_urls_id').val(response.source_urls);
        }
    });
});

В любом примере для корректной работы потребуется некоторая полировка, но они дают общую идею.

...