django x-editable /post URL 问题 & django 模型保存

django x-editable /post URL issue & django model save

我想单击该对象并更改其属性值并通过使用新属性值更新对象来保存它。

我尝试使用 x-editable 来实现它,但是它给了我一个问题,如下图所示。我相信这与我在 main.js 脚本中定义的 url 有关。

有什么办法可以解决吗?我想使用 django 模型保存功能,因为我出于其他原因使用它。

这是当我点击 substage 值并且 x-editable jquery 起作用时:

但它没有保存新值:

航站楼 returns:

[08/May/2016 17:06:03]"POST /post HTTP/1.1" 404 2027

下面是我的部分模板代码:

{% for substage in trsubstage.substages_related %}
    {% for zone in zones %}
        {% if zone == substage.stage.zone %}
            <td style="width:40px" align="center">
                <div id="substage">
                    <a href="#" data-pk="{{ substage.id }}" data-type="text" >
                        {{ substage.substage_value }}</a>
                </div>
            </td>
        {% endif %}
    {% endfor %}
{% endfor %}

这是我的 main.js 代码:

$(document).ready(function() {
    //toggle `popup` / `inline` mode
    $.fn.editable.defaults.mode = 'popup';

$('#substage a').editable({
    type: 'text',
    name: 'username',
    url: '/post',
    title: 'Enter username'
    });
});

这是我的 urls:

urlpatterns = [
    url(r'^$', views.MainStatusView.as_view(), name='mainstatus'),
    ]

这是我的模型 Substage:

class SubStage(models.Model):
    tablerow_substage = models.ForeignKey(TRSubStage)
    stage = models.ForeignKey(Stage)
    substage_value = models.PositiveSmallIntegerField(default=0)
    created_date = models.DateField(auto_now_add= True)
    created_time = models.TimeField(auto_now_add= True)

    def __str__(self):
        return '%s.%s.%s' % (self.stage.zone,
                             self.stage.tablerow_stage.stage_name,
                             self.tablerow_substage.substage_num)

    def __init__(self, *args, **kwargs):
        super(SubStage, self).__init__(*args, **kwargs)
        self.value_original = self.substage_value

    def save(self, **kwargs):
        with transaction.atomic():
            response = super(SubStage, self).save(**kwargs)
            if self.value_original != self.substage_value:
                substage_log = SubStageLog()
                substage_log.substage = self
                substage_log.substage_value = self.value_original
                substage_log.save()

            return response


class SubStageLog(models.Model):
    substage = models.ForeignKey(SubStage)
    substage_value = models.PositiveSmallIntegerField(default=0)
    update_date = models.DateField(auto_now_add= True)
    update_time = models.TimeField(auto_now_add= True)


    def __str__(self):
        return '%s | %s | %s' % (self.substage, self.update_date, self.update_time)

# to change str(self.id) to self.slug (but I need to add slug attribute to RoomLog)
    def get_absolute_url(self):
        return '/mods/' + str(self.id) + '/'

您的 urls.py 中没有名为 "post" 的 url,因此您的 js 可以运行,但请求不知道将您的数据发送到哪里。

好的,

下面是更新后的代码,现在可以正常工作,所以我可以保存值:-)

模板:

{% for substage in trsubstage.substages_related %}
    {% for zone in zones %}
        {% if zone == substage.stage.zone %}
            <td style="width:40px" align="center">
                <div id="substage">
                    <a href="#" data-pk="{{ substage.id }}" data-type="text" >
{{ substage.substage_value }}</a>
                </div>
            </td>
        {% endif %}
    {% endfor %}
{% endfor %}
</tr>
{% endfor %}

main.js

$(document).ready(function() {
    //toggle `popup` / `inline` mode
    $.fn.editable.defaults.mode = 'popup';

$('#substage a').editable({
    type: 'text',
    name: 'username',
    url: '/main/dupa/',
    title: 'Enter username'
    });
});

urls.py

urlpatterns = [
    url(r'^$', views.MainStatusView.as_view(), name='main'),
    url(r'^dupa/$', views.dupa, name='dupa'),
    ]

views.py

@csrf_exempt
def dupa(request):
    if request.POST:
        z = SubStage.objects.get(pk=request.POST.get('pk'))
        z.substage_value = int(request.POST.get('value'))
        z.save()
        return HttpResponseRedirect('/main/')