博客五部曲之三 - 博客RESTful


1259 浏览 5 years, 2 months

8 Python Shell中执行更新和删除

版权声明: 转载请注明出处 http://www.codingsoho.com/

在Python Shell中执行更新和删除

下面通过在python shell执行更新和删除操作帮忙理解一下这两个功能

进入shell命令

python manage.py shell

导入相应的对象,并且获取即将修改的对象

Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from posts.models import Post
>>> from posts.api.serializers import PostDetailSerializer
>>> obj = Post.objects.get(id=3)
>>> obj
<Post: new post3>

下面代码会将新的data数据写入当前对象

>>> data = {
...     "title" : "hi, there",
...     "slug": "new-content",
...     "publish": "2018-02-02"
... }
>>> new_item = PostDetailSerializer(obj, data=data)
>>> if new_item.is_valid():
...     new_item.save()
... else:
...     print new_item.errors
...
{'slug': [ErrorDetail(string=u'post with this slug already exists.', code=u'unique')]}
>>>     print new_item.errors
KeyboardInterrupt

出错了,因为这个data数据里的slug跟别的冲突了,修改这个变量,继续执行相同操作。

>>> data = {
...     "title" : "hi, there",
...     "slug": "new-content-new",
...     "publish": "2018-02-02"
... }
>>> new_item = PostDetailSerializer(obj, data=data)
>>> if new_item.is_valid():
...     new_item.save()
... else:
...     print new_item.errors
...
<Post: hi, there3>
>>> new_item.data
{'slug': u'new-content-new', 'publish': '2018-02-02', 'title': u'hi, there'}

上面代码中,id=3的这个对象成功被修改了。

接下来将它删除。

>>> new_item.delete()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'PostDetailSerializer' object has no attribute 'delete'
Serializer没有删除命令,可以用model的delete功能来删除。
>>> obj.delete()
(1, {u'posts.Post': 1})

删除之后,返回一个元组。

>>> obj
<Post: hi, thereNone>
>>> obj = Post.objects.get(id=3)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "E:\Computer\virtualenv\iblog\env\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "E:\Computer\virtualenv\iblog\env\lib\site-packages\django\db\models\query.py", line 379, in get
    self.model._meta.object_name
DoesNotExist: Post matching query does not exist.

查看被删除对象,变量虽然还存在,但是查看数据对象已经不存在了。