2016-07-12 3 views
0

Ниже приведены мои models.py и сделаны ссылки на внешнюю ссылку.Создайте новую запись с совпадением внешних отношений с внешним ключом

class emp_details(models.Model): 
    emp_id    = models.AutoField(primary_key = True) 
    emp_first_name  = models.CharField(max_length = 50,null = False) 
    emp_manager_id  = models.ForeignKey('self') 

a1 = emp_details(emp_first_name = "ramesh",emp_manager_id = 2) 
a1.save() 

Здесь я пытаюсь создать новую запись. Но у меня была следующая ошибка:

ValueError: Cannot assign "'2'": "emp_details.emp_manager_id" must be a "emp_details" instance. 

Как создать новую запись с совпадающим отношением внешних ключей?

ответ

1

В вашем случае emp_manager_id является полем внешнего ключа, поэтому вы должны назначить идентификатор emp_manager_id_id.

a1 = emp_details(emp_first_name = "ramesh", emp_manager_id_id=2) 

Было бы лучше, чтобы изменить имя поля emp_manager. Обратите внимание, что рекомендуется использовать CamelCase для вашего имени модели, поэтому EmpDetail лучше, чем emp_details. Полагая, что вместе, у вас есть:

class EmpDetail(models.Model): 
    emp_id = models.AutoField(primary_key = True) 
    emp_first_name = models.CharField(max_length = 50,null = False) 
    emp_manager = models.ForeignKey('self') 

Теперь, когда emp_manager является внешним ключом, вы можете присвоить идентификатор для emp_manager_id.

a1 = EmpDetail(emp_first_name="ramesh", emp_manager_id_id=2) 

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

a1 = EmpDetail(emp_first_name="ramesh") 
a1.save() 
a1.emp_manager = a1 # You could do 'a1.emp_manager_id = a1.id' instead 
a1.save() 

Для этого, чтобы работать, вам необходимо установить null=True на внешнем ключе, так что вы можете сохранить объект без установки emp_manager.

+0

Его работоспособность. Но у меня есть небольшое сомнение. Где вместо значения 2. Как я могу получить идентификатор объекта Self вместо того, чтобы проходить как статический аргумент. Пожалуйста, исправьте меня, если я ошибаюсь. – user1335606

+0

Прежде чем вы сможете получить доступ к своему идентификатору, сначала необходимо сохранить объект. См. Мой обновленный ответ. – Alasdair

+0

Его work.Thank вы – user1335606

Смежные вопросы