django模型ForeignKey关系

时间:2018-03-30 10:56:27

标签: python django django-models

我有3个模型User,Lesson,Company

class User(models.Model):
    pass

class Company(models.Model):
    pass  

class Lesson(models.Model):
    user = models.ForeignKey(User)
    company = models.ForeignKey(Company)

如何为两家公司添加一课

3 个答案:

答案 0 :(得分:3)

如果Company有多个Lesson,并且您还希望Lesson有多个Company,则应使用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)

答案 1 :(得分:0)

您应该将ForeignKey设置为Company型号:

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_set attribut:

访问与特定课程相关的公司
lesson.company_set.all()

您现在也可以为不同的公司分配一个课程:

company1.lesson = lesson
company2.lesson = lesson

答案 2 :(得分:0)

您可以通过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)

如果您使用以下代码更改模型,也可以使用:lessons代替lesson_set <{1}}

related_name

从现在起你就可以使用它了:

class Lesson(models.Model):
    company = models.ForeignKey(Company, related_name='lessons')