0

나는 장고 마이 그 레이션을 함께 필사적으로 노력하고 있습니다, 제발 도와주세요!사용자 정의 ID 필드를 일반 정수 필드로 변환하는 방법은 무엇입니까?

이 내가 가진 무엇 :

class ReceiptNumber(models.Model): 
    number = models.IntegerField() 

"수"전에 ID에 있던 데이터를하도록되어 :

class ReceiptNumber(models.Model): 
    id = models.AutoField(primary_key=True, unique=True) 

이 내가해야 할 것입니다. 이 장고를하는 동안 기본 ID 필드가 생성됩니다. 이 테이블은 다른 테이블과의 관계를 깨지 않기 위해 이전과 동일한 ID를 가져야합니다.

도와 주시겠습니까? 이 문제를 해결하기 위해 많은 노력을했지만 실제로 어떻게 해야할지 모르겠습니다. 단계별 가이드가 필요합니다. 논리적 인 방법은 id 필드를 복제하는 것이지만, 어떻게 그리고 어디서해야하는지 모른다.

도움을 주셔서 감사합니다. 이것에 대해 이미 며칠을 낭비했습니다.

답변

0

ReceiptNumber 모델에 number 필드를 추가 한 후에 makemigrations을 실행하십시오. 입력에 대한

# This is your migration 
from django.db import migrations, models 

def copy_id_to_number(apps, schema_editor): 
    ReceiptNumber = apps.get_model('receipts_app', 'ReceiptNumber') 

    for receipt_number in ReceiptNumber.objects.all(): 
     receipt_number.save() 


class Migration(migrations.Migration): 

    dependencies = [ 
     ('receipts_app', '0001_initial'), 
    ] 

    operations = [ 
     migrations.AddField(
      model_name='receiptnumber', 
      name='number', 
      field=models.IntegerField(default=1), 
      preserve_default=False, 
     ), 
     migrations.RunPython(copy_id_to_number), 
    ]  

 

# This should be in your models 

class ReceiptNumber(models.Model): 
    number = models.IntegerField() 

    def save(self, *args, **kwargs): 
     """ 
     Overriden to ensure the `number` field is always the same as the `id`. 
     """ 
     # make sure `id` is set 
     if not self.pk: 
      super().save(*args, **kwargs) 

     if not self.number: 
      self.number = self.pk 

     return super().save(*args, **kwargs) 
+0

안녕하세요, 감사합니다,하지만 난 단지 정수로 번호 필드가 필요합니다 지금과 같이 뭔가를 마이그레이션에 operations 목록을 변경합니다. 고유하고 기본 키가 없습니다. Instaed 기본 ID 필드가 pk로 필요하며 number 필드에 현재 데이터를 갖고 싶습니다. – JasonTS

+0

이 번호를 데이터베이스에 저장 하시겠습니까? – zaidfazil

+0

그에 따라 답변을 업데이트했습니다. – Matt