【问题标题】:django x-editable /post URL issue & django model savedjango x-editable /post URL issue & django model save
【发布时间】:2016-09-03 07:30:06
【问题描述】:

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

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

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

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

但它不保存新值:

终端返回:

[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'
    });
});

这是我的网址:

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) + '/'

【问题讨论】:

  • 我已将 main.js 文件中的 url 更改为:url:'',它确实更改了值并将其显示在表中,但它不保存新值。如何保存新值?

标签: django save models x-editable


【解决方案1】:

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

【讨论】:

  • 是的,但 url 是问题的一部分。问题是我在视图中没有处理数据以保存数据的功能。任何想法我应该在我的视图函数中保存对象的更改值?
  • 这是在 request.POST 中从 jquery 返回到 django 视图的内容,例如: .如何将其应用于我的模型对象保存功能?
  • 抱歉,我的手机无法正确格式化。 yourmodelobject.objects.get(pk=request.POST.get('pk')) yourmodelobject.value = request.POST.get('value')' yourmodelobject.save()
  • 我刚刚查看了它并按照您的链接在官方 django 网站上关注信息,现在它工作正常。谢谢:-)
【解决方案2】:

好的,

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

模板:

{% 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 %}

ma​​in.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/')

【讨论】:

    猜你喜欢
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    相关资源
    最近更新 更多