Как я могу автоматически создать связанное поле OneToOne в Django?

Я пробовал Django Annoying, как указано в этом ответе Создать экземпляр OneToOne при создании модели. Но я все равно получаю NOT NULL CONSTRAINT FAILED на поле OneToOne при создании моего объекта, что, как я полагаю, означает, что связанный объект не создан, следовательно NULL

Если я использую обработчик сигнала A, то он будет активироваться каждый раз, когда будет вызываться метод сохранения модели. В итоге я буду создавать новый объект даже при обновлении родительского объекта.

Структура моего профиля следующая:

{
    "id": 3,
    "password": "pbkdf2_sha256$320000$5TQCdD5wIelYpO4ktpuuAk$oBC9xUT+8RjOxZHvE8C+eowS4PvdCT8vUAuS4Y2n7sM=",
    "last_login": null,
    "is_superuser": false,
    "username": "hamad",
    "first_name": "",
    "last_name": "alahmed",
    "email": "",
    "is_staff": false,
    "is_active": true,
    "date_joined": "2022-06-17T13:04:51.927199Z",
    "height": null,
    "weight": null,
    "createddate": "2022-06-17T13:04:52.362396Z",
    "date": null,
    "hobbies": null,
    "dailyRoutine": {
        "id": 8,
        "steps": 0,
        "diet": "No Specified Diet",
        "maintained": 0
    },
    "groups": [],
    "user_permissions": [],
    "friends": [
        {
            "id": 1,
            "password": "pbkdf2_sha256$320000$YRcHWSjLi1CMbfrolZ0W7W$9LgjH2m5c8emE66pjdExmgep47BAdKTrCJ7MBiJx74w=",
            "last_login": "2022-06-17T17:50:48.410366Z",
            "is_superuser": true,
            "username": "super",
            "first_name": "Super1",
            "last_name": "Admin1",
            "email": "super@gmail.com",
            "is_staff": true,
            "is_active": true,
            "date_joined": "2022-06-17T12:27:37.575631Z",
            "height": 160,
            "weight": 75,
            "createddate": "2022-06-17T12:27:37.789754Z",
            "date": null,
            "hobbies": "Football",
            "dailyRoutine": 10,
            "groups": [],
            "user_permissions": [],
            "friends": [
                2,
                3
            ]
        }
    ]
}

Объект, который я хочу создать автоматически - DailyRoutine

Код Routine:

class Routine(models.Model):
steps = models.IntegerField(default=0)
diet = models.TextField(default='No Specified Diet')
maintained = models.IntegerField(default=0)

Код Profile

class Profile(AbstractUser):
height = models.IntegerField(blank=True, null=True)
weight = models.IntegerField(blank=True, null=True)
createddate = models.DateTimeField(auto_now_add=True)
date = models.DateField(blank=True, null=True)
hobbies = models.TextField(blank=True, null=True)
dailyRoutine = models.OneToOneField(Routine, related_name='dailyRoutine', on_delete=models.CASCADE)
friends = models.ManyToManyField("Profile", blank=True)

# def save(self, *args, **kwargs): Doing this will always create new DailyRoutine objects even when updating
#     self.dailyRoutine = Routine.objects.create()
#     super(AbstractUser, self).save(*args, **kwargs)
Вернуться на верх