2017-12-21 1 views
-1

나는 DB 모델이 있습니다장고 인해하지 테이블 인스턴스 DB 레코드를 추가 할 수 없습니다

가 관리 포털을 통해 레코드를 추가 할 문제가 없습니다
class building_list(models.Model): 
    building_id = models.CharField(max_length=25, verbose_name="Building ID", unique=True) 

    def __unicode__(self): 
     return self.building_id 

class data(models.Model): 
    oDate = models.DateField() 
    building_id = models.ForeignKey(building_list, to_field = "building_id") 
    content = models.CharField(max_length=25, verbose_name="Content") 

    def __unicode__(self): 
     return self.content 

, 나는 SELECT 목록에서 BUILDING_ID 선택할 수 있습니다 및 다 괜찮아.

그러나보기를 통해 레코드를 추가하려고 할 때 문제가 있습니다. 내가 당신에게 내 코드를 보여 드리죠 :

url(r'^(?P<building_id>[\w-]+)/$', views.test, name='test'), 

def test(request, building_id): 
    if request.method == 'POST': 
     oDate = request.POST.get('oDate', '') 
     content = request.POST.get('content', '') 

     row = data( 
      oDate = oDate, 
      building_id = building_id, 
      content = content 
     ) 

     return True 

나는

Cannot assign "u'BrI9'": "data.building_id " must be a "building_list" instance. 

사람이 내가 잘못 뭐하는 거지 설명 할 수 있음을 볼 수?

+0

내가 규칙을 클래스 특히 이름을 명명 꽤 몇 가지 문제를 참조하십시오. 나는 인스턴스의 초기화로서 data()를 읽는 것이 어렵다는 것을 안다. 좋습니다. building_id를 명확하게 전달하는 오류 메시지는 BuildingList의 인스턴스 여야하지만 인수는 숫자입니다. 그래서 당신은 건물 목록 객체가 "데이터" –

+1

행 = 데이터 –

+0

고마워 Muthuraj을 ( 오다 =오다, BUILDING_ID = building_list.objects.get (BUILDING_ID = BUILDING_ID), 내용 = 내용 )를 이동 초기화 할 수 있습니다 , 그것은 문제를 해결했습니다! –

답변

1

외래 키 이름을 building_id으로 했으므로 ID는 building_id_id입니다. 인스턴스 대신 ID를 할당 할 경우에, 당신은 할 필요가 :

row = data( 
    oDate=oDate, 
    building_id_id=building_id, 
    content=content, 
) 

장고에 권장되는 접근 방식은 외국 키 building의 이름을 지정하는 것입니다.

class data(models.Model): 
    oDate = models.DateField() 
    building = models.ForeignKey(building_list, to_field = "building_id") 

이제 ID는 building_id, 당신은 할 수 있습니다 :

row = data( 
    oDate=oDate, 
    building_id=building_id, 
    content=content , 
) 
관련 문제