繁体   English   中英

在manyToMany模型中的Django关系,对象没有属性

[英]Django relationship in manyToMany models, object has no attribute

我在M2M模型中建立关系时遇到问题。

models.py

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

views.py

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

表格

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

ModelForm实例不具有在模型上定义的procedure属性。 但是,由表单的save(...)方法返回的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/')

我不明白为什么你尝试添加IncomingProcedure.objectsfromviews.py

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

views.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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM