Инициализировать форму Django с параметрами из предыдущей страницы - PullRequest
0 голосов
/ 26 января 2019

плохо знакомы с Django, и до этого все шло гладко ...

Я пытаюсь передать широту / долготу в форму Django, когда пользователь нажимает на карту.

Вот js для моей страницы карты:

mapview.on("click", function(event) {
            // Get the coordinates of the click on the view
            // around the decimals to 3 decimals
            var lat = Math.round(event.mapPoint.latitude * 100000) / 100000;
            var lon = Math.round(event.mapPoint.longitude * 100000) / 100000;
            openForm(lat, lon);

function openForm(lat, lon){
        window.location.href = 'http://127.0.0.1:8000/form';
        alert("latitude: "+lat+" and longitude: "+lon);
}

И мои forms.py

class MyForm(forms.ModelForm):
    created_date = forms.DateTimeField() 
    userid = forms.CharField()
    description = forms.CharField()
    latitude = forms.CharField()
    longitude = forms.CharField()

    def __init__(self, *args, **kwargs):
        #instance = kwargs.get('instance', None)
        kwargs.update(initial={
            # 'field': 'value'
            'latitude': 'this text will initially populate...',
            'created_date': 
        })
        super(MineralForm, self).__init__(*args, **kwargs)

и views.py

def mineral(request):
    if request.method == "POST":
        form = MineralForm(request.POST) # populates form with what user tried to submit...
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.created_date = timezone.now()
            post.save()

            return render(request, 'blog/matMap.html')  

    form = MyForm()
    return render(request, 'form.html', {'form': form})

Любая помощь с этим будет принята с благодарностью! Спасибо !!!

1 Ответ

0 голосов
/ 26 января 2019

Самый простой способ - передать широту / долготу в вашу форму в качестве параметров запроса, например ::10000

// I was in a hurry, but make sure to url encode these
function openForm(lat, lon){
    window.location.href = 'http://127.0.0.1:8000/form?lat=' + lat + '&lon=' + lon;
    alert("latitude: "+lat+" and longitude: "+lon);
}    

Теперь, по вашему мнению, вы должны распаковать эти значения из request и инициализировать форму с этими значениями. Вы можете добавить начальные значения в форму django с initial аргументом . Мы используем latitude и longitude в качестве имен полей, потому что это имена полей, используемые в определении MyForm. Мы получили доступ к параметрам запроса, используя lat и lon, потому что это были имена, которые мы использовали в javascript.


    def mineral(request):
        form = None
        if request.method == "POST":
            form = MineralForm(request.POST) # populates form with what user tried to submit...
            if form.is_valid():
                post = form.save(commit=False)
                post.author = request.user
                post.created_date = timezone.now()
                post.save()

                return render(request, 'blog/matMap.html')  

        if form is None:
            <b>lat = request.GET.get('lat')
            lon = request.GET.get('lon')
            if lat is not None and lon is not None:
                form = MyForm(initial={ 'latitude': lat, 'longitude': lon })
            else:</b>
                form = MyForm()
        return render(request, 'form.html', {'form': form})
...