Python django模型外键关系
我有3个模型:用户、课程、公司Python django模型外键关系,python,django,django-models,Python,Django,Django Models,我有3个模型:用户、课程、公司 class User(models.Model): pass class Company(models.Model): pass class Lesson(models.Model): user = models.ForeignKey(User) company = models.ForeignKey(Company) 如何为两家公司添加一个课程您应该将ForeignKey放入公司模型: class Company(mod
class User(models.Model):
pass
class Company(models.Model):
pass
class Lesson(models.Model):
user = models.ForeignKey(User)
company = models.ForeignKey(Company)
如何为两家公司添加一个课程您应该将
ForeignKey
放入公司
模型:
class Company(models.Model):
lesson = models.Foreignkey(lesson)
创建新的公司对象,并将其添加到课程中:
>>> c1 = Comapany(attr="blah", attr2="foo")
>>> l1.comapany_set.add(c1)
您还可以将公司对象列表添加到课程中
>>> l1.comapany_set.add(*company_objs)
现在,您可以使用company\u set
attribute访问与特定课程相关的公司:
lesson.company_set.all()
此外,您现在还可以为不同的公司分配一个课程:
company1.lesson = lesson
company2.lesson = lesson
您可以通过shell实现这一点:
python manage.py shell
a = Company.objects.first()
b = Company.objects.last()
c = Lesson.objects.first()
a.lesson_set.add(c)
b.lesson_set.add(c)
如果您使用:related\u name
class Lesson(models.Model):
company = models.ForeignKey(Company, related_name='lessons')
从现在起,您可以像这样使用它:
a.lessons.add(c)
b.lessons.add(c)
如果
公司
有多个课程
s,并且您还希望课程
有多个公司
s,则应使用ManyToManyField
class Lesson(models.Model):
user = models.Foreignkey(User)
companies = models.ManyToManyField(Company)
c1 = Company()
c1.save()
c2 = Company()
c2.save()
l1 = Lesson()
l1.companies.add(c1, c2)
有什么方法可以处理外键关系吗?如果许多关系只存在于
公司
端,那么您可以使用外键
,正如Nevermoner所描述的那样。但是,如果您还希望每个公司有许多课程
(如您的开始示例所示),那么您需要一个ManyToManyField
。如果我在实时数据库中更改为ManyToManyField,我会遇到什么样的问题如果您进行此更改,然后进行迁移,Django将引入一个额外的透明联接表来支持多对多关系。这可能需要根据现有外键关系手动填充数据。这绝对是您在开发中首先应该做的事情(最好是使用live db的副本),以充分理解其含义。感谢您的帮助!你有必要保留ForeignKey而不是使用很多吗?是的,它在直播项目中,然后尝试我的答案中的概念,并让我知道结果。我尝试了,但没有效果。到底什么不起作用?你能提供一些回溯吗?