Невозможно назначить «40»: «Group.groupParent_id» должен быть экземпляром «Group» - PullRequest
1 голос
/ 24 июня 2019

Я хочу добавить группу из моей групповой модели. этот рекурсивен в отношении родителей и детей.

Но когда я хочу создать группу с детьми. У меня ошибка

моя модель:

class Group(models.Model):
    group_id = models.AutoField(primary_key=True)
    groupParent_id = models.ForeignKey('self', blank=True, null=True, related_name='children', on_delete=models.CASCADE)
    group_name = models.CharField(max_length=100, null=False, blank=False, unique=True)

views.py: Моя функция, которая вызывает ошибку в строке 18 GroupParent_id:

def add_group_fromcoa(request):  # add type and subtype of chart of account as first serie of group and subgroup

    # ------ Type adding -----
    types = ChartOfAccount.objects.order_by().values_list("field_type", flat=True).distinct()

    for type_types in types:

        upload_data = Group.objects.get_or_create(group_name=type_types,)

    types = ChartOfAccount.objects.order_by().values_list('field_subtype', flat=True).distinct()

    for type_types in types:
        looktype = ChartOfAccount.objects.filter(field_subtype=type_types).values('field_type').first()
        print("retour Groupe: {}".format(looktype['field_type']))
        looktyp= Group.objects.filter(group_name=looktype['field_type']).values('group_id').first()
        print("IDGroup: {}".format(int(looktyp['group_id'])))
        upload_data = Group.objects.get_or_create(
          group_name=type_types,
          groupParent_id=int(looktyp['group_id']))

    return redirect(home)

1 Ответ

1 голос
/ 24 июня 2019

Когда вы создаете отношение внешнего ключа в Django, поведение Djano по умолчанию заключается в присвоении имени столбцу <object_column_name>_id. Итак, когда вы добавляете поле groupParent_id, Django называет поле базы данных groupParent_id_id. Теперь, когда у вас есть внешний ключ в модели Django, у вас есть два способа ссылаться на эту связь: вы можете использовать объект или первичный ключ базы данных. Если вы используете имя поля из модели, ссылка должна быть объектом. Однако, если вы добавите _id в конец, вы можете использовать первичный ключ, как вы пытаетесь сделать здесь. Если вы измените groupParent_id=int(looktyp['group_id']) на groupParent_id_id=int(looktyp['group_id']), это должно сработать.

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