【问题标题】:Update view not working? Django更新视图不​​起作用?姜戈
【发布时间】:2017-09-20 09:12:09
【问题描述】:

用户可以在此网址创建飞机帖子:

url(r'^upload/aircraft/$', aircraft_create, name="aircraft_create"),

我创建了一个显示所有用户帖子的摘要页面。他们可以在这里编辑和删除他们的帖子。网址:

url(r'^account/uploads/$', upload_overview, name="account_uploads"),

但是,我希望用户能够在他们的摘要页面上编辑他们的帖子。我现在设置它的方式是他们可以在upload/aircraft/edit 进行编辑,但我想成为account/uploads/edit

我已经这样设置了,但它什么也没做?关于它可能是什么的任何线索?

Aircraft/views.py

def aircraft_create(request):
  form = aircraft_form(request.POST or None)
  if form.is_valid():
    instance = form.save(commit=False)
    instance.user = request.user
    instance.save()
    messages.success(request, "Your upload has been successfully added!")
    return HttpResponseRedirect(instance.get_absolute_url())
  else:
    messages.error(request, "There seems to be something wrong. Have a look again..!")
  context = {"form":form,}
  return render(request,'aircraft/aircraft_form.html', context)

更新视图

def aircraft_update(request, id=None):
  aircraft = get_object_or_404(Aircraft, id=id)
  form = aircraft_form(request.POST or None, instance=aircraft)
  if form.is_valid():
    form.save()
    messages.success(request, "Your edit has been successfully been saved!")
    return HttpResponseRedirect(aircraft.get_absolute_url())

  return render(request,'aircraft/aircraft_form.html',
    {"aircraft": aircraft, "form": form})

模板

  {% if UploadedAircraft %}
  {% for upload in UploadedAircraft %}
    <div class="col-lg-offset-0 col-md-4 col-sm-3 item">
        <div class="box"><a href="{{ upload.get_absolute_url }}"><img src="{{ upload.image.url }}" width="200px" height="200px" alt="{{ upload.title }}"/></a>
            <h3 class="name"><a href="{{ upload.get_absolute_url }}">{{ upload.name }}</a></h3>
            <a href="{% url 'aircraft_update' %}"><button class="btn">Edit</button></a>
            <a href="{% url 'aircraft_delete' %}"><button class="btn">Delete</button></a>
        </div>

摘要页面视图

def upload_overview(request):
    uploaded_aircraft = Aircraft.objects.filter(user=request.user)
    return render(request,'account/upload_overview.html',{'UploadedAircraft':uploaded_aircraft)

url.py

   #aircraft/detail/1
    url('^aircraft/detail/(?P<id>\d+)/$', aircraft_detail, name='aircraft_detail'),

    #account/uploads (Display Users uploads)
    url(r'^account/uploads/$', upload_overview, name="account_uploads"),

    #upload/aircraft (Create Aircraft)
    url(r'^upload/aircraft/$', aircraft_create, name="aircraft_create"),

    #Edit/aircraft
    url('^account/uploads/$', aircraft_update, name='aircraft_update'),

编辑

def airline_update(request, id=None):
  airline = get_object_or_404(Airline, id=id)
  form = airline_form(request.POST or None, instance=airline)
  if form.is_valid():
    form.save()
    return HttpResponseRedirect(airline.get_absolute_url())
  return render(request,'airline/airline_form.html',
    {"airline": airline, "form": form})

网址

#account/upload/edit/ (Edit airline)
url(r'^account/uploads/edit/(?P<id>[0-9]+)$', airline_update, name='airline_update'),

模板

<a href="{% url 'airline_update' id=upload.id %}"><button class="btn">Edit</button></a>

【问题讨论】:

  • 如果您希望他们能够在 URL /account/uploads/edit 上进行编辑,您需要将您的最后一个 url 修改为:url('^account/uploads/edit/$', aircraft_update, name='aircraft_update'), ...目前您没有与 URL @987654335 匹配的内容@
  • 找不到页面 (404) 没有与给定查询匹配的飞机。
  • 你能用aircraft_update的视图定义更新你的帖子吗?
  • 是的,但不是我想要的网址。看看我的更新视图
  • 感谢您的更新-我已添加答案以尝试解决此问题。

标签: python django url-routing


【解决方案1】:

假设您正在尝试编辑具有特定 ID 的飞机,您需要在 url.py 中使用类似的内容(假设 ID 是整数):

url('^account/uploads/edit/(?P&lt;id&gt;[0-9]+)$', aircraft_update, name='aircraft_update')

在您的模板中,您需要更新您的锚链接以包含 ID:

&lt;a href="{% url 'aircraft_update' id=upload.id %}"&gt;

请注意,这假定upload 对象(在您的模板循环中)包含一个id 属性,并且id 属性对应于您要更新的飞机ID。 (您可能将此属性命名为其他名称。)

编辑:这足以执行 GET 请求。但是,我注意到您对aircraft_update 的视图定义也尝试检查表单是否有效。此表单在您的模板中的什么位置?它似乎不在您的循环中。

【讨论】:

  • 完美。你太棒了!
  • 我很高兴能帮上忙!我刚才确实对我的帖子进行了编辑,因为我没有在您的模板中看到任何定义的表单,但是为了简洁起见,您可能只是没有包含该代码。如果我的帖子解决了您的问题,请随时忽略我的编辑。
  • 我有一个航空公司型号,和飞机型号一模一样;相同的观点 - 一切!我将上面的代码用于航空公司一号,我得到“没有飞机与给定的查询匹配。”
  • 您确定您查询的是正确的型号吗?如果你有一个不同的模型,Airline,我不希望 Django 错误消息说“没有 Aircraft 匹配给定的查询”。你应该确保你的代码是get_object_or_404(Airline, id=id),假设你的模型名称确实是Airline
  • 检查编辑!一切都是正确的,但抛出了那个错误:/
猜你喜欢
  • 2014-03-11
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 2021-03-05
  • 2020-11-14
  • 2015-07-18
  • 2012-10-23
  • 2020-08-17
相关资源
最近更新 更多