【问题标题】:Django : How to link model one objects with model two in form?Django:如何将模型一对象与模型二联系起来?
【发布时间】:2019-11-24 17:13:33
【问题描述】:

我试图将一个模型对象与表单中的另一个模型链接,但最终得到无效的表单

模型.py: 类患者(models.Model):

    name = models.CharField(max_length=200);
    phone = models.CharField(max_length=20);
    address = models.TextField();
    Patient_id = models.AutoField(primary_key=True);
    Gender= models.CharField(choices=GENDER,max_length=10)
    consultant = models.CharField(choices=CONSULTANT,max_length=20)
    def __str__(self):
        return self.name 

class Rooms(models.Model):
    name = models.CharField(max_length=200)
    room_num = models.IntegerField()
    def __str__(self):
        return str(self.name)

class Ipd(models.Model):

    reason_admission = models.CharField(max_length=200, blank=False)
    presenting_complaints = models.CharField(max_length=200,)
    ipd_id = models.AutoField(primary_key=True)
    rooms = models.OneToOneField(Rooms,on_delete=models.CASCADE, 
    blank=False)
    investigation = models.CharField(max_length=300)
    patient = models.ForeignKey(Patient,on_delete=models.CASCADE,null = 
    False)

Forms.py:

from .models import Patient,Ipd


class PatientForm(forms.ModelForm):


    class Meta:
        model = Patient
        fields = 
    ['name','phone','address','Patient_id','consultant','Gender']

class IpdForm(ModelForm):

    class Meta:
        model = Ipd

        fields = ['patient','reason_admission','presenting_complaints', 
        'rooms','investigation']

views.py:

@login_required
def ipd (request,patient_id):
    patient = Patient.objects.get(pk=patient_id)
    if request.POST:

        data = dict(request.POST)
        data['patient']=Patient.Patient_id
        formtwo = IpdForm(request.POST)
        if  formtwo.is_valid():
            if formtwo.save():
                return redirect('/', messages.success(request, 'Patient is 
successfully updated.', 'alert-success'))

            else:
                return redirect('/', messages.error(request, 'Data is not 
saved', 'alert-danger'))
        else:
            return redirect('/', messages.error(request, 'Form is not 
valid', 'alert-danger'))
    else:
        formtwo = IpdForm(request.POST)
        return render(request, 'newipd.html', {'form2':formtwo 
,'form':patient})

我有用于创建 Patient 的 Patient 模型,以及在入院前从 Patient 获取额外信息的 Ipd 模型。所以我正在尝试将 Ipd 模型与患者链接以创建新的 Ipd 列表

【问题讨论】:

    标签: django django-models django-forms


    【解决方案1】:

    首先,这可能不是错误,但这是一种普遍接受的做法: 而不是

    if request.POST:
    

    if request.method == "POST":
    

    此外,在您的重定向中,您将消息放入参数中。我不确定这一点,但我认为你可以做到

    messages.success ...
    return redirect("/")
    

    因为我认为您的重定向不会起作用。 当你这样做时,我强烈怀疑错误是在 else 之后

    formtwo = IpdForm(request.POST)
    

    因为 request.POST 已经显示为 None 相反,做

    formtwo = IpdForm()
    

    查看django form docs。 此外,我很确定您不能将外键放入表单中(在您的情况下是 IpdForm 和患者类)。相反,从表单字段中删除“患者”并执行此操作

    if formtwo.isvalid():
        formtwo.user_id = request.user.id
    

    我希望这至少可以帮助您解决问题

    【讨论】:

      猜你喜欢
      • 2017-03-23
      • 2021-11-06
      • 1970-01-01
      • 2011-12-06
      • 2020-02-07
      • 2022-01-07
      • 2018-06-17
      • 2013-04-19
      • 2021-12-09
      相关资源
      最近更新 更多