Django模型-字段
Django模型-字段
Django的模型(Model)是对象关系映射(ORM)的核心部分,它允许开发者以Python类的方式定义数据库结构。每个模型类都代表数据库中的一张表,而类的属性则对应表中的字段。在Django中,字段类型非常丰富,用于满足不同的数据存储需求。
常用字段类型
- CharField:用于存储短字符串。需要指定
max_length
参数来限制字符串的最大长度。
class MyModel(models.Model):
name = models.CharField(max_length=100)
- TextField:用于存储长文本,如文章、评论等。
class MyModel(models.Model):
description = models.TextField()
- IntegerField、FloatField、DecimalField:分别用于存储整数、浮点数和小数。其中
DecimalField
需要指定max_digits
和decimal_places
参数。
class MyModel(models.Model):
age = models.IntegerField()
price = models.DecimalField(max_digits=10, decimal_places=2)
- DateField 和 DateTimeField:用于存储日期和时间。
class MyModel(models.Model):
publish_date = models.DateField()
created_at = models.DateTimeField(auto_now_add=True) # 创建时自动设置当前时间
- BooleanField:用于存储布尔值(True/False)。
class MyModel(models.Model):
is_active = models.BooleanField(default=True)
- ForeignKey 和 ManyToManyField:用于定义表之间的关系。
ForeignKey
表示一对多关系,ManyToManyField
表示多对多关系。
class Category(models.Model):
name = models.CharField(max_length=100)
class Article(models.Model):
title = models.CharField(max_length=200)
category = models.ForeignKey(Category, on_delete=models.CASCADE) # 一对多关系
tags = models.ManyToManyField('Tag') # 多对多关系
- EmailField 和 URLField:特殊类型的
CharField
,用于存储电子邮件地址和URL,会进行一定的格式验证。
class MyModel(models.Model):
email = models.EmailField()
website = models.URLField()
字段参数
除了基本的字段类型外,Django的字段还支持许多参数,用于定制字段的行为。例如:
null
:如果为True,Django将用NULL来在数据库中存储空值。默认值是False。blank
:如果为True,该字段允许不输入值。默认为False。需要注意的是,这与null不同。null是数据库范畴的,blank是表单验证范畴的。如果一个字段的blank=True,表单的验证将允许该字段是空值。如果字段的blank=False,该字段就是必填项。default
:字段的默认值。可以是一个值或者一个可调用对象。如果是一个可调用对象,每有新对象被创建它都会被调用。unique
:如果该值为True, 这个数据字段的值在整张表中必须是唯一的。
自定义字段
除了Django内置的字段类型外,你还可以根据需要创建自定义字段类型。这通常涉及到继承django.db.models.Field
类并实现相关方法。
总结
Django的字段系统强大而灵活,能够满足大部分数据库存储需求。通过合理使用不同类型的字段和参数,你可以轻松地定义出符合业务逻辑的数据库模型。同时,Django的ORM还提供了丰富的查询和操作方法,使得数据操作变得简单而高效。
👨💻博主Python老吕说:如果您觉得本文有帮助,辛苦您🙏帮忙点赞、收藏、评论,您的举手之劳将对我提供了无限的写作动力!🤞
print('Hello,World!') # 每日一码,使用Python跟世界说Hello,World!
🔥精品付费专栏:《Python全栈工程师》、《跟老吕学MySQL》、《Python游戏开发实战讲解》
🌞精品免费专栏:《Python全栈工程师·附录资料》、《Pillow库·附录资料》、《Pygame·附录资料》、《Tkinter·附录资料》、《Django·附录资料》、《NumPy·附录资料》、《Pandas·附录资料》、《Matplotlib·附录资料》、《Python爬虫·附录资料》
🌐前端免费专栏:《HTML》、《CSS》、《JavaScript》、《Vue》
💻后端免费专栏:《C语言》、《C++语言》、《Java语言》、《R语言》、《Ruby语言》、《PHP语言》、《Go语言》、《C#语言》、《Swift语言》、《跟老吕学Python编程·附录资料》
💾数据库免费专栏:《Oracle》、《MYSQL》、《SQL》、《PostgreSQL》、《MongoDB》