多对多模型中的Django关联,对象没有属性

2024-06-16 12:42:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我在与m2m建立关系时遇到了问题。在

在模型.py在

class ECG(models.Model):
    procedure= models.ManyToManyField('Procedure')
    ...
class Procedure(models.Model):
    basic_info= models.IntegerField(default=0)

在视图.py在

^{pr2}$

在表单.py在

class NewECG(ModelForm):
    class Meta:
        model = ECG
        exclude = ['procedure']
        # fields = '__all__'
        fields = [ ... ] # rest fields, except procedure

Procedure已存在。我需要创建与过程相关的newECG。心电图表以分贝为单位保存。问题是当我想使用add()函数时。在

ERROR :'NewECG' object has no attribute 'procedure', exception location: views.py

Tags: py模型infofieldsmodelbasic关系models
3条回答

我不明白你为什么要把IncomingProcedure.objects添加到你的from中视图.py

如果要将其保存在数据库中,只需执行以下操作:

视图.py

# ... Your codes:
M = form.save()  # save your class instance to M variable
info = IncomingProcedure.objects.get(id=procedure_id)
M.procedure.add(info) # save procedure instance to your object(An ECG model instance)

ModelForm实例没有在模型上定义的procedure属性。但是,由表单的ECG方法返回的ECG模型实例确实有它:

ecg_instance = form.save()
info = IncomingProcedure.objects.get(id=procedure_id)
# info = Procedure.objects.get(id=procedure_id)
ecg_instance.procedure.add(info)

你忘了一步:

def newECG(request, procedure_id):
    if request.method == 'POST':
        form = NewECG(request.POST)
        if form.is_valid():
            ecg = form.save()
            info = IncomingProcedure.objects.get(id=procedure_id)
            ecg.procedure.add(info) #HERE IS A PROBLEM
            return HttpResponseRedirect('/system/')

相关问题 更多 >