2011-04-28 115 views
0

我在我的模型表單中插入一條新記錄,其中我的模型是包含foriegn鍵的子表單。當我提交表單時出錯,它應該是foriegn鍵的實例。使用外鍵在django模型表單中創建對象

這裏是我的模型

class MMEditidState(models.Model): 
    state_id = models.IntegerField(primary_key = True) 
    state_dremelid = models.ForeignKey(MMDremelDump, db_column = 'state_dremelid') 
    assignee = models.CharField(max_length = 50) 
    state = models.CharField(max_length = 50) 
    role = models.CharField(max_length = 50) 
    date = models.DateTimeField() 
    class Meta: 
    db_table = u'mm_editid_state' 
    def __unicode__(self): 
    return u'%s %s' % (self.state_dremelid, self.assignee) 

    class MMEditidErrors(models.Model): 
    error_id = models.IntegerField(primary_key = True) 
    error_stateid = models.ForeignKey(MMEditidState, db_column = 'error_stateid') 
    feature_type = models.CharField(max_length = 20) 
    error_type = models.CharField(max_length = 20) 
    error_nature = models.CharField(max_length = 50, null = True) 
    error_details = models.CharField(max_length = 50) 
    error_subtype = models.CharField(max_length = 200) 
    date = models.DateTimeField() 
    class Meta: 
    db_table = u'mm_editid_errors' 
    def __str__(self): 
    return "%s" % (self.error_dremelid) 
    def __unicode__(self): 
    return u'%s' % (self.error_dremelid) 

這是我的看法

def qcthisedit(request, get_id): 
    if request.method == "POST": 
    form = forms.MMEditidErrorForm(get_id, request.POST) 
    if form.is_valid(): 
     form.save() 
    return http.HttpResponseRedirect('/mmqc/dremel_list/') 
    else: 
    form = forms.MMEditidErrorForm(get_id) 
    return shortcuts.render_to_response('qcthisedit.html',locals(), 
            context_instance = context.RequestContext(request)) 

這裏是我的形式

class MMEditidErrorForm(forms.ModelForm): 
    def __init__(self,get_id, *args, **kwargs): 
    super(MMEditidErrorForm, self).__init__(*args, **kwargs) 
    dremel = MMEditidState.objects.filter(pk=get_id).values('state_id') 
    dremelid = int(dremel[0]['state_id']) 
    self.fields['error_stateid'] = forms.IntegerField(initial = dremelid, 
                widget = forms.TextInput(
                   attrs{'readonly':'readonly'})) 
    feature_type = forms.TypedChoiceField(choices = formfields.FeatureType) 
    error_type = forms.TypedChoiceField(choices = formfields.ErrorType) 
    error_nature = forms.TypedChoiceField(choices = formfields.ErrorNature) 
    error_details = forms.TypedChoiceField(choices = formfields.ErrorDetails) 
    error_subtype = forms.TypedChoiceField(choices = formfields.ErrorSubType) 
    class Meta: 
     model = models.MMEditidErrors 
     exclude = ('error_id','date') 

當我提交表單我正在錯誤

Cannot assign "1": "MMEditidErrors.error_stateid" must be a "MMEditidState" instance. 

所以我增加了線條

get_id = MMEditidState.objects.get(pk = get_id) 

現在我得到以下提到的錯誤

int() argument must be a string or a number, not 'MMEditidState' 

form = forms.MMEditidErrorForm(get_id, request.POST)

別人在這個

感謝 幫助維克拉姆

+0

我已經使用自定義窗體,而不是它工作的模型窗體 – vkrams 2011-04-28 10:43:04

回答

1

我已經通過簡單地使用自定義窗體而不是模型窗體來解決此問題。在將數據存儲在數據庫中時,我管理自己的views.py

相關問題