>

외래 키를 다른 모델의 필드로 설정하고 싶습니다.

외래 키를 시도했습니다 to_field = 'field_name'

class Banks(models.Model):
    name = models.TextField()
    id = models.IntegerField(unique=True)
    class Meta:
        db_table = 'banks'
class Branches(models.Model):
    ifsc = models.CharField(max_length=20, null=False)
    bank_id = models.ForeignKey(Banks, to_field='id', on_delete=models.CASCADE)
    branch = models.CharField(max_length=50)```
ProgrammingError: column branches.id does not exist
LINE 1: SELECT "branches"."id", "branches"."ifsc", "branches"."bank_...

  • 답변 # 1

    이 문제는 외래 키로 인한 것이 아닙니다. 지점 모델에서 오류가 발생하는데 아마도 db_table 도 있습니다.  메타 속성이며 레거시 테이블을 기반으로합니다.

    귀하의 모델에 대한 기본 키를 정의해야합니다. 그렇지 않으면 Django가 자동으로 수행하여 id 라고합니다. . Banks 모델의 경우 해당 id 를 설정해야합니다.   primary_key=True 로 필드  -또는 이것이 기본값이므로 완전히 제거하십시오. 지점에 적합한 pk를 찾아 현장에서 선언해야합니다.

    실제 질문에 대해서는 아무 것도 할 필요가 없습니다. Django는 대상 모델의 PK를 가리 키도록 FK를 자동으로 설정합니다.

    class Bank(models.Model):
        # removed `id` as that is the default PK
        name = models.TextField()
        class Meta:
            db_table = 'banks'
    class Branch(models.Model):
        ifsc = models.CharField(max_length=20, primary_key=True)  # assume this is the PK
        bank = models.ForeignKey(Bank, on_delete=models.CASCADE)
        branch = models.CharField(max_length=50)
        class Meta:
            db_table = 'branches'
    
    

    참고 : 이것들은 레거시 테이블이므로 아마도 managed = False 를 추가하고 싶을 것입니다  두 메타 클래스에. AKX가 제안한 것처럼 모델 이름을 특이하게 만드는 것은 장고 스타일입니다. 명시 적으로 선언되었으므로 테이블 이름에 영향을주지 않고이를 수행 할 수 있습니다.

관련 자료

  • 이전 r - 오늘 생성 된 디렉토리에 파일 나열
  • 다음 java - HashSet 동작은 놀랍습니다