2011-04-28 76 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

相关问题