ModelForm с полем Foreignkey не сохраняется - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь сохранить ModelForm с полем Foreignkey из другой модели. Но почему-то данные не сохраняются. Первичный ключ поля Foreignkey в моделях задач - из индекса моделей биоданных. html форма загружается со значением сеанса ['пациента'], которое должно быть значением внешнего ключа в моделях проблем при создании нового элемента. При отправке формы говорится, что новый элемент успешно добавлен, но в бэкэнде он вообще не был сохранен.

Вот код:

models.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

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

forms.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')

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Вы только что написали instance.save, и это не приводит к какой-либо ошибке, потому что допустимо написать это так. Выполнение переместится на новую строку, и вы получите сообщение об успехе.

Поскольку save - это метод экземпляра, вы должны вызывать его как instance.save().

0 голосов
/ 14 марта 2020

В ваших views.py исправить это

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

Вы пытаетесь

instance.Biodata = .......

Поскольку поле Biodata не существует в таблице задач

...