社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  问与答

[精华] 菜鸟 django ForeignKey 求教

msliudongsheng • 10 年前 • 11682 次点击  

一个Model 里有几个关联的外键,如果要生成一条新记录,是不是我要把关联的记录都查出来,然后把值赋给model 才可以save,这样岂不是有很多不必要的查询?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/557
 
11682 次点击  
文章 [ 12 ]  |  最新文章 10 年前
msliudongsheng
Reply   •   1 楼
msliudongsheng    10 年前

@Django中国社区 class Topic(models.Model): user=models.ForeignKey(User,on_delete=models.CASCADE) title=models.CharField(max_length=200) addtime=models.DateTimeField(auto_now_add=True) edittime=models.DateTimeField(auto_now=True,null=True)

使用 python manage.py sql 并不会是数据库形成CASCADE 的关系,改成其他参数sql也没有变化

Py站长
Reply   •   2 楼
Py站长    10 年前

@msliudongsheng 你把表定义完整写出来

msliudongsheng
Reply   •   3 楼
msliudongsheng    10 年前

@Django中国社区 再求教一问题 为什么 question=models.ForeignKey(Question,on_delete=models.CASCADE) 类似的外键设置无法正确生成SQL 无论怎样设置on_delete sql都无变化,数据库是默认值restrict?还有怎么设置 on update 啊?

Leo
Reply   •   4 楼
Leo    10 年前

@Django中国社区 棒

Py站长
Reply   •   5 楼
Py站长    10 年前

假设

class Employee(models.Model):
  first_name = models.CharField(max_length=100)
  last_name = models.CharField(max_length=100)
  type = models.ForeignKey('EmployeeType')

使用时

employee = Employee(first_name="Name", last_name="Name")
employee.type_id = 4
employee.save()

http://stackoverflow.com/questions/2846029/django-set-foreign-key-using-integer

msliudongsheng
Reply   •   6 楼
msliudongsheng    10 年前

@Leo 谢谢啦 。。。。

Leo
Reply   •   7 楼
Leo    10 年前

@Django中国社区

Leo
Reply   •   8 楼
Leo    10 年前

@msliudongsheng 无法判断,咨询站主

msliudongsheng
Reply   •   9 楼
msliudongsheng    10 年前

@Leo 额,没有其他方法了吗?通常可能已经拥有department和post的id,这样我还要进行两次查询,会不会不合理啊

Leo
Reply   •   10 楼
Leo    10 年前

@msliudongsheng 你的employee如果目前不需要存储这俩个实例,可以设置'null=True,blank=True' 如果一定要存这俩个实例,那就只有把实例get出来

msliudongsheng
Reply   •   11 楼
msliudongsheng    10 年前

@Leo 我想请教的是 如果 有employee Model 包含 department = models.ForeignKey(Department)和post=models.ForeignKey(Post),那如果我要创建一条employee 记录 是不是要把department和post 都查出来才能Save啊?

Leo
Reply   •   12 楼
Leo    10 年前

黑暗:
provider = models.ForeignKey(InnerUser,null=True,blank=True,related_name='provide') user = models.ForeignKey(InnerUser,null=True,blank=True,related_name='use')