因为我们之前定义的模型里面的id都是不自增的,所以加入数据时需要手动添加,很麻烦,所以我们先把id的定义都删除,然后把migrations文件夹下的那些文件都delete。
然后我们进入mysql数据库,把我们之前的数据库删掉drop database lesson4;
然后再重新创建一个库create database lesson4;
,这样比较方便一些。
然后再makemigrations 和 migrate。
这样的话会自动给我们每个表创建一个自增的id的。
接下来通过shell模式,创建对象:
python manage.py shell
from app.models import User
user = User.objects.create(username='cong', age='18', phone=13899999999, email='[email protected]', info='加油丛丛')
结果这里的phone,out of range。。。无奈改短先。
这里能看到已经创建了一个对象
然后user这里返回的值我们是可以自定义的。
在User类中加上:
def __str__(self):
return 'user:{}'.format(self.username)
然后我们exit(),重新进一下shell
from app.models import User
user = User.objects.get(id = 1)
user
>>> user = User(username='xiaoming', age=17, phone=111111, email='[email protected]', info='xiaoming doesnot share food')
>>> user.save()
修改值:
>>> user.age = 19
>>> user.save()
>>> user.age
19
使用vars可以将对象的值以字典的方式显示:
>>> _user = vars(user)
>>> _user
输出如下:
{
'_state': <django.db.models.base.ModelState object at 0x000001C8360A3E50>,
'id': 2,
'username': 'xiaoming',
'age': 19,
'phone': 111111,
'email': '[email protected]',
'info': 'xiaoming doesnot share food',
'create_time': datetime.datetime(2021, 11, 13, 8, 9, 20, 121479, tzinfo=<UTC>),
'update_time': datetime.datetime(2021, 11, 13, 8, 10, 25, 421997, tzinfo=<UTC>)}
删除
>>> user.delete()
(1, {
'app.Group_user': 0, 'app.User': 1})
这时再使用get去获取id=2 就找不到,会报错
>>> user = User.objects.get(id = 2)
Traceback (most recent call last):
File "" , line 1, in <module>
File "C:\Users\35479\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\35479\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\query.py", line 397, in get
raise self.model.DoesNotExist(
app.models.User.DoesNotExist: User matching query does not exist.
ps:如果使用filter,不会报错,只会返回一个[]
>>> user = User.objects.filter(id = 2)
>>> user
<QuerySet []>
把其他的models也都导入进来:
from app.models import Userprofile, Diary, Group
user = User.objects.get(id=1)
user_profile = Userprofile.objects.create(user=user, birthday='1998-09-28')
import time
diary = Diary.objects.create(user=user, content='今天天气晴', create_time=time.time())
这里的create time不是自增的,而是一个整型,所以需要我们导入time,自己创建。
然后是Group对象的创建:
group = Group.objects.create(user=user, name='IT', create_time=time.time())
这里报了一个错误TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use user.set() instead.
这里能是不能直接创建user的。
步骤如下:
>>> group = Group(name='IT', create_time=time.time())
>>> group.save()
>>> group.user.add(user)
>>> group
<Group: Group object (1)>
先添加user之外的其他字段值,然后save,在用add的方式把user添加进去。
再给group添加一些user:
>>> user = User.objects.get(id=1)
>>> user
<User: user:cong>
>>> group = Group.objects.get(id=2)
>>> group.name
'开发'
>>> group.user.add(user)
就把cong也加到group开发里了。