Python Django Get方法,基10的文本无效

Python Django Get方法,基10的文本无效,python,django,Python,Django,这与先前的mt问题有关。我已经找到了一些类似问题的答案,但我不确定它们在这里是如何应用的 我正在尝试使用GET方法在Django Web服务器上创建内容。当我键入以下url时: http://127.0.0.1:8000/maps/createEvent/?name=explosion&reporter=nathaniel&description=something%20exploded&lat=99&lon=99&timestamp=2434253

这与先前的mt问题有关。我已经找到了一些类似问题的答案,但我不确定它们在这里是如何应用的

我正在尝试使用GET方法在Django Web服务器上创建内容。当我键入以下url时:

 http://127.0.0.1:8000/maps/createEvent/?name=explosion&reporter=nathaniel&description=something%20exploded&lat=99&lon=99&timestamp=2434253
我得到这个错误:

    invalid literal for int() with base 10: 'explosion'
Request Method: GET
Request URL:    http://127.0.0.1:8000/maps/createEvent/?name=explosion&reporter=nathaniel&description=something%20exploded&lat=99&lon=99&timestamp=2434253
Django Version: 1.5.2
Exception Type: ValueError
Exception Value:    
invalid literal for int() with base 10: 'explosion'
以下是有问题的url:

url(r'^createEvent/$', views.createEvent, name='createEvent')  
以及以下观点:

def createEvent(request):
e = Event(request.GET['name'],request.GET['reporter'],request.GET['description'],
           request.GET['lat'],request.GET['lon'],request.GET['timestamp'])
e.save()

return HttpResponseRedirect(reverse('maps:event_detail', args=(e.id,)))
首先将方法添加到
事件
模型:

class Event(models.Model):
    # your fields go here

    def get_absolute_url(self):
       return reverse('maps:event_detail', self.pk)
您需要这样做:

from django.shortcuts import redirect

def createEvent(request):
   e = Event.objects.create(name=request.GET.get('name'),
                            reporter=request.GET.get('reporter'),
                            description=request.GET.get('description'),
                            lat=request.GET.get('lat'),
                            lon=request.GET.get('lon'),
                            timestamp=request.GET.get('timestamp'))

   return redirect(e)
将自动保存对象;如果传递了模型的实例,则会自动使用
get\u absolute\u url
方法

或者,您可以使用
模型表单
-如果这是用户正在输入的内容:

在名为
forms.py
的文件中,添加以下内容:

from django import forms
from .models import Event

class EventForm(forms.ModelForm):
    class Meta:
        model = Event
现在,您的视图变得非常简单:

from django.shortcuts import render
from .forms import EventForm

def createEvent(request):
    form = EventForm(request.POST)
    if form.is_valid():
       e = form.save()
       return redirect(e)
    return render(request, 'form.html', {'form': form})
您的模板(form.html)现在是:

以上所有代码段都执行完全相同的逻辑(第一个代码段除外,它只保存一个对象)。如您所见,django为常见任务提供了快速快捷方式。

首先向您的
事件
模型添加一个方法:

class Event(models.Model):
    # your fields go here

    def get_absolute_url(self):
       return reverse('maps:event_detail', self.pk)
您需要这样做:

from django.shortcuts import redirect

def createEvent(request):
   e = Event.objects.create(name=request.GET.get('name'),
                            reporter=request.GET.get('reporter'),
                            description=request.GET.get('description'),
                            lat=request.GET.get('lat'),
                            lon=request.GET.get('lon'),
                            timestamp=request.GET.get('timestamp'))

   return redirect(e)
将自动保存对象;如果传递了模型的实例,则会自动使用
get\u absolute\u url
方法

或者,您可以使用
模型表单
-如果这是用户正在输入的内容:

在名为
forms.py
的文件中,添加以下内容:

from django import forms
from .models import Event

class EventForm(forms.ModelForm):
    class Meta:
        model = Event
现在,您的视图变得非常简单:

from django.shortcuts import render
from .forms import EventForm

def createEvent(request):
    form = EventForm(request.POST)
    if form.is_valid():
       e = form.save()
       return redirect(e)
    return render(request, 'form.html', {'form': form})
您的模板(form.html)现在是:


以上所有代码段都执行完全相同的逻辑(第一个代码段除外,它只保存一个对象)。如您所见,django为常见任务提供了快速快捷方式。

您可以发布
事件
模型的定义吗?事件构造函数是否希望第一个参数为整数?或者更好的说法是尝试将字符串转换为int?实际上我刚刚解决了这个问题,我将在下面发布我的答案。谢谢大家。有时候,只要问一个问题就能知道答案;)我喜欢这种情况发生在我身上。哈哈,是的,我不能在8小时内发布答案,因为我没有代表,但基本上我需要将事件(,…)放入构造函数中。我不习惯这种格式。您能发布
事件
模型的定义吗?事件构造函数是否希望第一个参数为整数?或者更好的说法是尝试将字符串转换为int?实际上我刚刚解决了这个问题,我将在下面发布我的答案。谢谢大家。有时候,只要问一个问题就能知道答案;)我喜欢这种情况发生在我身上。哈哈,是的,我不能在8小时内发布答案,因为我没有代表,但基本上我需要将事件(,…)放入构造函数中。我不习惯那种格式。嘿,谢谢你!这是一个很好的答案。事实证明,我面临的实际错误是createEvent()示例中的键值配对。我昨晚就想出来了,但既然你得到了这个+大约一打其他的东西,我就称之为回答。如果你想编辑它,特别指出我的语法错误,我会接受。嘿,谢谢!这是一个很好的答案。事实证明,我面临的实际错误是createEvent()示例中的键值配对。我昨晚就想出来了,但既然你得到了这个+大约一打其他的东西,我就称之为回答。如果你想编辑它,特别指出我的语法错误,我会接受。