Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么django表单要从模型中删除字段?_Python_Django_Forms - Fatal编程技术网

Python 为什么django表单要从模型中删除字段?

Python 为什么django表单要从模型中删除字段?,python,django,forms,Python,Django,Forms,我有一个追踪模型,还有一个证据模型。我正试图上传一个与跟踪相关的证据文件……但当我试图保存时,出现了以下错误: Request Method: POST Request URL: http://127.0.0.1:8000/myapp/change_actions/tracking/create/1/ Django Version: 1.10.1 Exception Type: RelatedObjectDoesNotExist Exception Value:

我有一个追踪模型,还有一个证据模型。我正试图上传一个与跟踪相关的证据文件……但当我试图保存时,出现了以下错误:

Request Method:     POST
Request URL:    http://127.0.0.1:8000/myapp/change_actions/tracking/create/1/
Django Version:     1.10.1
Exception Type:     RelatedObjectDoesNotExist
Exception Value:    

Evidence has no tracking.
我的视图保存跟踪表单,然后将该记录的id作为外来项传递给证据表单…但该错误就像表单删除了跟踪字段!!。。。。这些是我的文件:

型号.py

class Tracking(ModelBase):    
    activity = models.ForeignKey(
        Activity,
        verbose_name = 'Actividad', null = False)
    code = models.CharField('Codigo de seguimiento', max_length=50)
    observation = models.TextField('Avance a la fecha', max_length=2000)
    tracking_date = models.DateTimeField('Fecha de seguimiento')


    def __str__(self):
        return self.observation

class Evidence(ModelBase):

    tracking = models.ForeignKey(
        Tracking,
        related_name = 'Tracking_evidence',
        verbose_name = 'Seguimiento', null = False)
    evidence = models.FileField(verbose_name = 'Evidencia', null = True, upload_to='documents/')
这是表单。py:

class EvidenceForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        self.tracking = kwargs.pop('tracking')
        super(EvidenceForm, self).__init__(*args, **kwargs)

    def clean(self, *args, **kwargs):
        cleaned_data = super(EvidenceForm, self).clean()
        self.instance.tracking.id = self.tracking

    class Meta:
        model = Evidence
        fields = ['tracking', 'evidence']
class TrackingCreateView(View):

    template_name = ['change_actions/tracking_create.html']
    breadcrumb = [{'name': 'Registro de seguimiento', 'url': None}]

    @method_decorator(login_required)
    def get(self, request, *args, **kwargs):
        form = TrackingForm()
        form_evidence = EvidenceForm(tracking = None)
        activity = Activity.objects.get(pk = kwargs['activity_id'])
        return render(request, self.template_name,{
            'form_tracking': form,'breadcrumb': self.breadcrumb,
            'activity': activity,'form_evidence': form_evidence})

    def post(self, request, *args, **kwargs):
        form = TrackingForm(request.POST)
        activity = Activity.objects.get(pk = request.POST['activity_id'])
        self.breadcrumb[0]['url'] = reverse(
            'change_actions:tracking_create',
            kwargs = {'activity_id': activity.id })
        context = {
            'breadcrumb': self.breadcrumb, 'activity': activity,
            'form_tracking': form}

        if form.is_valid():
            form.save()
            form_evidence = EvidenceForm(
                request.POST, request.FILES, tracking = form.instance.id)

            if form_evidence.is_valid():
                form_evidence.save()
                messages.success(request, 'Seguimiento registrado correctamente')
                return HttpResponseRedirect(reverse(
                    'change_actions:activity_detail',
                    kwargs = {'activity_id': activity.id }))
            else:
                context.update({'form_evidence': form_evidence}) 
                return render(request, self.template_name, context)
        else:
            context['form_tracking'] = form
            return render(request, self.template_name, context)
及其视图:

class EvidenceForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        self.tracking = kwargs.pop('tracking')
        super(EvidenceForm, self).__init__(*args, **kwargs)

    def clean(self, *args, **kwargs):
        cleaned_data = super(EvidenceForm, self).clean()
        self.instance.tracking.id = self.tracking

    class Meta:
        model = Evidence
        fields = ['tracking', 'evidence']
class TrackingCreateView(View):

    template_name = ['change_actions/tracking_create.html']
    breadcrumb = [{'name': 'Registro de seguimiento', 'url': None}]

    @method_decorator(login_required)
    def get(self, request, *args, **kwargs):
        form = TrackingForm()
        form_evidence = EvidenceForm(tracking = None)
        activity = Activity.objects.get(pk = kwargs['activity_id'])
        return render(request, self.template_name,{
            'form_tracking': form,'breadcrumb': self.breadcrumb,
            'activity': activity,'form_evidence': form_evidence})

    def post(self, request, *args, **kwargs):
        form = TrackingForm(request.POST)
        activity = Activity.objects.get(pk = request.POST['activity_id'])
        self.breadcrumb[0]['url'] = reverse(
            'change_actions:tracking_create',
            kwargs = {'activity_id': activity.id })
        context = {
            'breadcrumb': self.breadcrumb, 'activity': activity,
            'form_tracking': form}

        if form.is_valid():
            form.save()
            form_evidence = EvidenceForm(
                request.POST, request.FILES, tracking = form.instance.id)

            if form_evidence.is_valid():
                form_evidence.save()
                messages.success(request, 'Seguimiento registrado correctamente')
                return HttpResponseRedirect(reverse(
                    'change_actions:activity_detail',
                    kwargs = {'activity_id': activity.id }))
            else:
                context.update({'form_evidence': form_evidence}) 
                return render(request, self.template_name, context)
        else:
            context['form_tracking'] = form
            return render(request, self.template_name, context)

知道我为什么会犯这个错误吗?提前谢谢

如果手动设置
跟踪
,则应将其保留在表单字段之外。让您的模型继承自
ModelBase
而不是
models。Model
极不寻常。我们需要更多信息。您可以在创建对象时添加POST数据吗?和完整的堆栈跟踪。在
form.save()之后尝试调试。