Как установить отношение "один к одному" в модели django в базе данных mongo?
Я использую mongo db с djongo в django. У меня есть две модели Employee
и PresentEmployee
.
Сотрудник:
class Employee(models.Model):
employee_id = models.CharField(primary_key=True, max_length=10, null=False, blank=False)
employee_name = models.CharField(max_length=200, null=False, blank=False)
email = models.EmailField(max_length=500, null=True, blank=True)
def __str__(self):
return self.employee_name
PresentEmployee:
class PresentEmployee(models.Model):
employee_id = models.OneToOneField(Employee, on_delete=models.CASCADE)
present_id = models.IntegerField(null=False, blank=False)
id = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False)
def __str__(self):
return str(self.employee_id)
когда я пытаюсь добавить новый объект в PresentEmployee
, я получаю ошибку
Как я могу установить отношение "один к одному" от Employee
модели к PresentEmployee
модели. Как поле OneToOneField в sql db типа postgresql.
примечание: не обращайте внимания на web_1 |
, это потому, что я использую docker.
Если вы используете djongo, вы можете создать класс EmbeddedField:
class EmbeddedField(MongoField):
def __init__(
self,
model_container: typing.Type[Model],
model_form_class: typing.Type[forms.ModelForm] = None,
model_form_kwargs: dict = None,
*args,
**kwargs
):
После этого на вашем примере вы можете создать что-то вроде этого
class Employee(models.Model):
employee_id = models.ObjectIdField()
employee_name = models.CharField(max_length=200, null=False, blank=False)
email = models.EmailField(max_length=500, null=True, blank=True)
def __str__(self):
return self.employee_name
class PresentEmployee(models.Model):
present_id = models.ObjectIdField()
employee = models.EmbeddedField(model_container=Employee)
id = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False)
def __str__(self):
return str(self.employee_id)