Py学习  »  问与答

[精华] 菜鸟 django ForeignKey 求教

msliudongsheng • 10 年前 • 12028 次点击  

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/557
 
12028 次点击  
文章 [ 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')