I have Person
model and PersonDetail
model with OneToOneField() as shown below:
class Person(models.Model):
name = models.CharField(max_length=20)
class PersonDetail(models.Model):
person = models.OneToOneField(Person, on_delete=models.CASCADE)
age = models.IntegerField()
gender = models.CharField(max_length=20)
But, when using persondetail_set
of a Person
object as shown below:
obj = Person.objects.get(id=1)
print(obj.persondetail_set.get(id=1))
# ↑ ↑ ↑ Here ↑ ↑ ↑
Then, there is the error below:
AttributeError: 'Person' object has no attribute 'persondetail_set'
So, I used ForeignKey() as shown below:
class PersonDetail(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
# ...
Then, there was no error:
PersonDetail object (1)
Or, I used ManyToManyField() as shown below:
class PersonDetail(models.Model):
person = models.ManyToManyField(Person)
# ...
Then, there was no error:
PersonDetail object (1)
So, cannot the parent model's object use _set
with OneToOneField()
in Django?
obj = Person.objects.get(id=1)
print(obj.persondetail_set.get(id=1))
# ↑ ↑ ↑ Here ↑ ↑ ↑