【问题标题】:How do I save a Django Model from request.POST?如何从 request.POST 中保存 Django 模型?
【发布时间】:2010-10-23 22:47:43
【问题描述】:

我正在尝试使用 POST 数据查询字典从 django 模型中保存一个新对象。这是 PISTON 处理程序的一部分。我在很多例子中都看到过这种做法,但我就是无法让它发挥作用。

这是我的代码:

class FestHandler(BaseHandler):
    model = Deal

    def create(self, request):
        """
        Creates a new fest.
        """
        attrs = self.flatten_dict(request.POST)
        postcopy = request.POST.copy()
        if self.exists(**attrs):
            return rc.DUPLICATE_ENTRY
        else:
            loc = Location.objects.get(pk=attrs['location'])
            postcopy['location'] = loc
            fest = Fest(postcopy)
            fest.save()
            return fest

这是我每次收到的错误:
Exception was: int() argument must be a string or a number, not 'QueryDict'

我意识到错误的含义,所以基本上我在问如何通过传入整个 POST 字典来保存新的“Fest”,而不必每次都像这样手动输入键:

loc = Location.objects.get(pk=attrs['location'])
fest = Fest(
    location=loc,
    name=attrs['name'],
    description=attrs['description'],
    details=attrs['details'],
)

感谢您的帮助!

【问题讨论】:

    标签: django django-models django-piston


    【解决方案1】:

    首先,我认为你会更高兴你明确地将你的 PK 变成整数。

            loc = Location.objects.get(pk=int(attrs['location']))
    

    其次,你应该使用表单。

    1. 它会为您验证字段。

    2. 它将从 Form 对象创建 Model 对象。

    阅读本文。 http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/

    【讨论】:

    • 嗯。这似乎奏效了。但是,现在它在我保存后返回一个 HTML 表单,而不是 PISTON 呈现给 JSON 的 Fest 对象。有没有简单的方法来改变这个?或者,有没有办法在不使用“表单”的情况下做到这一点?谢谢!
    • 没关系,我明白了。抱歉我的愚蠢问题,我仍然对 Django 或 python 不太满意。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 2023-03-23
    • 2020-08-01
    • 2016-06-13
    • 1970-01-01
    相关资源
    最近更新 更多