我现在正在定义我的Django模型,我意识到在模型字段类型中没有OneToManyField。我相信有办法做到这一点,所以我不确定我错过了什么。我基本上有这样的东西:
class Dude(models.Model):
numbers = models.OneToManyField('PhoneNumber')
class PhoneNumber(models.Model):
number = models.CharField()
在这种情况下,每个Dude可以有多个PhoneNumber,但这种关系应该是单向的,因为我不需要从PhoneNumber中知道哪个Dude拥有它,本质上,因为我可能有许多不同的对象拥有PhoneNumber实例,例如Business:
class Business(models.Model):
numbers = models.OneToManyField('PhoneNumber')
我将在模型中用什么替换OneToManyField(它不存在)来表示这种关系?我来自Hibernate/JPA,在那里声明一对多关系非常简单:
@OneToMany
private List<PhoneNumber> phoneNumbers;
如何在Django中表达这一点?
尽管这里的大多数答案在定义关系时传递了允许您定义OneToManyRelationship的关系,但它们实际上是多对多关系的定义。
下面是一个更准确的实现:
class Dude(models.Model):
name = models.CharField(max_length=256, unique=True)
class PhoneNumber(models.Model):
number = models.CharField(max_length=256, unique=True)
class DudePhoneNumbers(models.Model):
dude = models.ForeignKey(Dude, related_name="phone_number_relations", on_delete=models.CASCADE)
phone_number = models.OneToOneField(PhoneNumber, related_name="dude_relation", on_delete=models.CASCADE)
首先我们来参观一下:
01)一对多关系:
ASSUME:
class Business(models.Model):
name = models.CharField(max_length=200)
.........
.........
phone_number = models.OneToMany(PhoneNumber) (NB: Django do not support OneToMany relationship)
class Dude(models.Model):
name = models.CharField(max_length=200)
.........
.........
phone_number = models.OneToMany(PhoneNumber) (NB: Django do not support OneToMany relationship)
class PhoneNumber(models.Model):
number = models.CharField(max_length=20)
........
........
注意:Django没有提供任何OneToMany关系。所以在Django中不能使用upper方法。但是我们需要在关系模型中进行转换。那么我们能做什么呢?在这种情况下,我们需要将关系模型转换为反向关系模型。
在这里:
关系模型=一个多
所以,反向关系模型=多对一
注意:Django支持多对一关系&在Django中多对一由ForeignKey表示。
02)多对一关系:
SOLVE:
class Business(models.Model):
.........
.........
class Dude(models.Model):
.........
.........
class PhoneNumber(models.Model):
........
........
business = models.ForeignKey(Business)
dude = models.ForeignKey(Dude)
Nb:简单想想!!