【问题标题】:Django URL design for posting update to a model instance用于向模型实例发布更新的 Django URL 设计
【发布时间】:2012-11-02 15:01:06
【问题描述】:

假设我定义了以下模型:

class Location(models.Model):
    name = models.CharField(max_length=20)
    longitude = models.CharField(max_length=30)
    latitude = models.CharField(max_length=30)

还有一个带有id=1的现有Location实例

我想针对此实例发布更新,但我不确定如何将 pk/id 发送到服务器。我有两个想法。

  1. 将其作为 URL 的一部分包含(例如 ^update_location/(?P<pk>[0-9]+)/$')。
  2. 将其与更新其他属性的值一起包含在 POST 数据中。

我的问题是我为什么要选择一个而不是另一个?

我更倾向于选项 1,因为默认情况下,我正在使用的通用视图 django.views.generic.edit.UpdateView 支持它。但是后来我还是不知道怎么选。

【问题讨论】:

    标签: django django-views django-urls


    【解决方案1】:

    我会说你可以这样做:

    url(r'^update_location/(?P<location_id>\d+)/$', 'location.views.update'),
    

    然后在你看来:

    def detail(request, location_id):
        // do whatever needed with location_id object
        location = Location.objects.get(id=location_id)
        return HttpResponse("You're updating location %s." % location_id)
    

    关于表单处理,您可以查看: https://docs.djangoproject.com/en/dev/topics/forms/?from=olddocs

    【讨论】:

    • 好的。但是为什么这种方法优于另一种方法呢?其他方法有问题吗?
    • 我会说这种方法(django 风格)产生更清晰的 url...除此之外我没有发现任何问题。经典的 POST 方式已经使用了很长时间:)
    【解决方案2】:

    选项 1 使 python 更容易,因为 reverse() 将使 url 很好。

    选项 2 使 javascript 更容易,因为它不必组成 url 和 POST 数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-27
      • 2021-05-04
      • 1970-01-01
      • 2016-02-15
      • 2022-01-04
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多