Сохранить связанные дочерние поля модели из родительского - Django - PullRequest
0 голосов
/ 21 марта 2019

У меня есть эти модели:

class MyModel1(models.Model):
    field1 = models.CharField(max_length=128, blank=True, null=True)
    fieldrelated1 = models.OneToOneField('MyModel2', max_length=128, blank=True, null=True, related_name='mymodel2')
    fieldrelated2 = models.OneToOneField('MyModel3', max_length=128, blank=True, null=True, related_name='mymodel3')
    fieldrelated3 = models.OneToOneField('MyModel4', max_length=128, blank=True, null=True, related_name='mymodel4')

class MyModel2(models.Model):
    field2 = models.CharField(max_length=128, blank=True, null=True)
    test = models.CharField(max_length=128, blank=True, null=True)

class MyModel3(models.Model):
    field3 = models.CharField(max_length=128, blank=True, null=True)
    test = models.CharField(max_length=128, blank=True, null=True)

class MyModel4(models.Model):
    field4 = models.CharField(max_length=128, blank=True, null=True)
    test = models.CharField(max_length=128, blank=True, null=True)

Что мне нужно, так это когда я сохраняю запись из MyModel1, автоматически создаю объект на MyModel2, MyModel3 and MyModel4. С некоторыми заполненными полями с данными от родителя.

Пока у меня есть это:

def create_child_records(instance, created, rad, **kwargs):
    if not created or rad:
        return

    if not instance.fieldrelated1_id:
        fieldrelated1, _ = MyModel2.objects.get_or_create(field1=field2)
    instance.fieldrelated1 = fieldrelated1

    if not instance.fieldrelated2_id:
        fieldrelated2, _ = MyModel3.objects.get_or_create(field1=field3)
    instance.fieldrelated2 = fieldrelated2

    if not instance.fieldrelated3_id:
        fieldrelated3, _ = MyModel4.objects.get_or_create(field1=field4)
    instance.fieldrelated3 = fieldrelated3

    instance.save()

models.signals.post_save.connect(create_child_records, sender=MyModel1, dispatch_uid='create_child_records')

Но когда я пытаюсь спасти от родителя, меня бросает:

name 'field2' is not defined

Этот метод находится в конце родительской модели, с отступом, если я сделаю отступ, он выдает:

ValueError: Invalid model reference MyModel1. String model references must be of the form 'app_label.ModelName'

Если я заключаю модель отправителя (MyModel1) между '', например:

models.signals.post_save.connect(create_child_records, sender='MyModel1', dispatch_uid='create_child_records')

бросает:

ValueError: Invalid model reference 'MyModel1'. String model references must be of the form 'app_label.ModelName'.

Есть идеи?

1 Ответ

2 голосов
/ 21 марта 2019

Сообщение об ошибке достаточно явное.Вы пробовали это:

models.signals.post_save.connect(create_child_records, sender='myapp.MyModel1', dispatch_uid='create_child_records')

Также функция create_child_records содержит много ошибок: неправильные имена полей, неопределенные переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...