0

我正在尝试从另一个模型中保存带有外键字段的 ModelForm。但不知何故,数据没有被保存。问题模型中外键字段的主键来自 Biodata 模型 index.html 表单加载了 session['patient'] 值,该值应该是创建新项目时问题模型中外键的​​值。提交表单后,它说新项目已成功添加,但在后端,它根本没有保存。

这是代码:

模型.py

class Biodata(models.Model):
  lastname = models.CharField(max_length=50)
  firstname = models.CharField(max_length=50)
  dob = models.DateField()
  sex = models.CharField(max_length=10)
  address = models.CharField(max_length=100,blank=True)
  suburb = models.CharField(max_length=40,blank=True)
  state = models.CharField(max_length=50,blank=True)
  postcode = models.CharField(max_length=6,blank=True)

def __str__(self):
    return self.firstname + " " + self.lastname

class Problems(models.Model):
  biodata = models.ForeignKey(Biodata, on_delete = models.CASCADE, default=None)
  problem = models.CharField(max_length=200)
  notes = models.CharField(max_length=300)
  status = models.CharField(max_length=30)
  date = models.CharField(max_length=10)

def __str__(self):
    return self.problem

视图.py

def problem_add(request):
  patient_id = request.session['patient']

  form = ProblemForm(request.POST)
  if form.is_valid():
     instance = form.save(commit=False)
     instance.Biodata = Biodata.objects.get(id=patient_id)
     instance.save
     messages.success(request,('Problem added'))
     return redirect('/crud/index/')
  else : 
     messages.success(request,('There is error in the form'))
  return redirect('/crud/index/')

表格.py

class ProblemForm(forms.ModelForm):

STATUS = [('S','Stable'),('U','Unstable'),('I','Inactive'),('O','Ongoing Dx.')]

problem = forms.CharField(label='',max_length=50, widget=forms.TextInput(attrs={'placeholder':'Problem'}))
notes = forms.CharField(label='', widget=forms.Textarea(attrs={'rows':4,'placeholder':'Notes'}))
status = forms.ChoiceField(label='', widget=forms.Select(attrs={'placeholder':'Status'}), choices=STATUS)
date = forms.DateField(label='', widget=forms.DateInput(format='%m/%d/%Y', attrs={'class':'datepicker','placeholder':'Date'}),
    input_formats=('%m/%d/%Y', ))
class Meta :
    model = Problems
    fields = ('problem','notes','status','date')
4

2 回答 2

0

你刚刚写了instance.save,这不会导致任何错误,因为这样写是有效的。执行移动到新行,您会收到成功消息。

因为save是实例上的一个方法,你应该像instance.save().

于 2020-03-14T04:49:55.107 回答
0

在你的views.py中纠正它

instance.biodata=Biodata.objects.get(id=patient_id) 

你在尝试

instance.Biodata = .......

由于问题表中不存在 Biodata 字段

于 2020-03-14T02:41:05.023 回答