2011-08-29 4 views
2

외래 키를 사용하여 관련 테이블의 기본 키 ("레거시 스키마")를 "가리 키지"않는 외래 키를 사용할 때 ModelForm을 저장하는 데 문제가 있습니다 to_field = 내 Foregin 키가 정확하게 키가 아닌 키와 관련 될 수 있도록합니다. 기본 렌더링에 2 분이 걸리기 때문에 내 ModelForm 외래 키는 HiddenInput()의 쿼리 세트와 위젯과 함께 ModelChoiceField를 사용합니다. 쿼리 세트가 관련 개체 (Checkin)를 반환 할 때 옵션 값으로 기본 키를 반환하기 때문에 저장하려고하면 유효하지 않은 옵션이 표시됩니다. 이 설정에서 ModelChoiceField를 계속 사용하려면 어떻게해야합니까? 아래 내 기본 스키마.Django : to_field 및 ModelChoiceForm을 사용하여 외래 키로 Modelform 저장

class Checkin(models.Model): 
    sampleid = models.CharField(unique=True, max_length=255, db_column='SampleID', primary_key=True) 
    #shortsampleid is the field that is sometimes used as a sort of pk. 
    shortsampleid = models.IntegerField(unique=True, db_column='ShortSampleID') 
    company = models.CharField(max_length=765, db_column='Company', blank=True) 
    ... 

class Tblshipmentstore(models.Model): 
    shortsampleid = models.ForeignKey(Checkin, to_field='shortsampleid', db_column='ShortSampleID') 
    shipmentitem = models.CharField(max_length=765, db_column='ShipmentItem', blank=True) 
    shipdate = models.DateField(null=True, db_column='ShipDate', blank=True) 
    ... 

class TblShipmentstoreForm(ModelForm): 
    shortsampleid = forms.ModelChoiceField(queryset=Checkin.objects.all(), widget=forms.HiddenInput()); 

    class Meta: 
     model = 'Tblshipmentstore' 
+0

내가 대답 아래 게시 한하지만, 당신이하려는 이유 당신이려고하는 경우에 나는 폼에 알고 호기심 것 어쨌든 필드를 숨기시겠습니까? 실제로 일부 자바 스크립트 또는 somesuch 양식을 사용하여? – kdt

답변

4

는 ModelChoiceField는 기본 키 대신 해당 필드를 사용하게하면 건설 시간에 통과 할 수 문서화되지 않은 to_field_name 매개 변수를 가지고있다. 이 (안된를) 사용하려면 같은

소리가 난다 :

shortsampleid = forms.ModelChoiceField(
    queryset=Checkin.objects.all(), 
    to_field_name = 'shortsampleid', 
    widget=forms.HiddenInput()); 
+0

Brilliant. 그것이 열쇠였습니다. 감사. – geraldcor

관련 문제