Как установить отношение "один к одному" в модели 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)
Вернуться на верх