今天首席CTO笔记来给各位分享关于什么是django外键的相关内容,其中也会对django不使用外键连接表进行详细介绍,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、什么是django?2、如何在Django Admin中显示外键的外键3、Django模型中的OneToOneField和ForeignKey有什么区别4、django 插入外键值思路5、django 2.0外键处理什么是django?
Django是一个开放源代码的Web应用框架,由Python写成。
1、Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。
2、它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。
3、这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。
如何在Django Admin中显示外键的外键
如何在Django Admin中显示外键的外键
在专业类里面定义一个默认的__unicode__(self)方法,参考以下伪代码
def __unicode__(self):
dreturn ('学校:%s,学院:%s,专业:%s' %(self.学院.学校,self.学院,self.专业))
Django模型中的OneToOneField和ForeignKey有什么区别
one to one是一对一,foreignke是多对一。
onetoone的这个外键相当是加了unique约束的。
foreikey则不然,可以多条记录外键指向相同的外键记录。
django 插入外键值思路
1.先确定需要添加添加的带有外键的数据格式,涉及几个表
2.前端组装好这个数据格式传回后端
3.后端验证数据,从请求中分离出外键的值,进行获取对象
4.使用add进行添加外键的值
r1=Role.objects.get(role_name=role) # r1表示UserInfo的多对多数据
u1=UserInfo(user_name=name,user_pwd=password,sex=sex,mobileno=mobile,email=email)
u1.save()
u1.role.add(r1)
u1.save()
django 插入多对多数据
django 2.0外键处理
Django2.0里model外键和一对一的on_delete参数
在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:
TypeError: __init__() missing 1 required positional argument: 'on_delete'
举例说明:
user=models.OneToOneField(User)
owner=models.ForeignKey(UserProfile)
需要改成:
user=models.OneToOneField(User,on_delete=models.CASCADE) --在老版本这个参数(models.CASCADE)是默认值
owner=models.ForeignKey(UserProfile,on_delete=models.CASCADE) --在老版本这个参数(models.CASCADE)是默认值
参数说明:
on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择的值
CASCADE:此值设置,是级联删除。
PROTECT:此值设置,是会报完整性错误。
SET_NULL:此值设置,会把外键设置为null,前提是允许为null。
SET_DEFAULT:此值设置,会把设置为外键的默认值。
SET():此值设置,会调用外面的值,可以是一个函数。
一般情况下使用CASCADE就可以了。
下面是官方文档说明:
ForeignKey accepts other arguments that define the details of how the relation works.
ForeignKey.on_delete ¶
When an object referenced by a ForeignKey is deleted, Django will emulate the behavior of the SQL constraint specified by the on_delete argument. For example, if you have a nullable ForeignKey and you want it to be set null when the referenced object is deleted:
user=models.ForeignKey(User,models.SET_NULL,blank=True,null=True,)
Deprecated since version 1.9: on_delete will become a required argument in Django 2.0. In older versions it defaults toCASCADE.
The possible values for on_delete are found in django.db.models :
CASCADE [source] ¶
Cascade deletes. Django emulates the behavior of the SQL constraint ON DELETE CASCADE and also deletes the object containing the ForeignKey.
PROTECT [source] ¶
Prevent deletion of the referenced object by raising ProtectedError , a subclass of django.db.IntegrityError .
SET_NULL [source] ¶
Set the ForeignKey null; this is only possible if null isTrue.
SET_DEFAULT [source] ¶
Set the ForeignKey to its default value; a default for the ForeignKey must be set.
SET() [source] ¶
Set the ForeignKey to the value passed to SET() , or if a callable is passed in, the result of calling it. In most cases, passing a callable will be necessary to avoid executing queries at the time your models.py is imported:
fromdjango.confimportsettingsfromdjango.contrib.authimportget_user_modelfromdjango.dbimportmodelsdefget_sentinel_user():returnget_user_model().objects.get_or_create(username='deleted')[0]classMyModel(models.Model):user=models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.SET(get_sentinel_user),)
DO_NOTHING [source] ¶
Take no action. If your database backend enforces referential integrity, this will cause an IntegrityError unless you manually add an SQLONDELETEconstraint to the database field.
ForeignKey.limit_choices_to ¶
Sets a limit to the available choices for this field when this field is rendered using aModelFormor the admin (by default, all objects in the queryset are available to choose). Either a dictionary, a Q object, or a callable returning a dictionary or Q object can be used.
For example:
staff_member=models.ForeignKey(User,on_delete=models.CASCADE,limit_choices_to={'is_staff':True},)
causes the corresponding field on theModelFormto list onlyUsersthat haveis_staff=True. This may be helpful in the Django admin.
The callable form can be helpful, for instance, when used in conjunction with the Pythondatetimemodule to limit selections by date range. For example:
deflimit_pub_date_choices():return{'pub_date__lte':datetime.date.utcnow()}limit_choices_to=limit_pub_date_choices
Iflimit_choices_tois or returns a Qobject , which is useful for complex queries , then it will only have an effect on the choices available in the admin when the field is not listed in raw_id_fields in theModelAdminfor the model.
Note
If a callable is used forlimit_choices_to, it will be invoked every time a new form is instantiated. It may also be invoked when a model is validated, for example by management commands or the admin. The admin constructs querysets to validate its form inputs in various edge cases multiple times, so there is a possibility your callable may be invoked several times.
结语:以上就是首席CTO笔记为大家介绍的关于什么是django外键和django不使用外键连接表的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。