首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django :如何在表单中将模型一对象与模型二联系起来?

Django :如何在表单中将模型一对象与模型二联系起来?
EN

Stack Overflow用户
提问于 2019-07-16 10:20:32
回答 1查看 124关注 0票数 0

我尝试将一个模型对象与表单中的其他模型链接,但以无效表单告终

Models.py:患者类别(models.Model):

代码语言:javascript
复制
    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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
@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})

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

EN

回答 1

Stack Overflow用户

发布于 2019-07-16 11:57:29

首先,这可能不是错误,但它是一个普遍接受的实践:而不是

代码语言:javascript
复制
if request.POST:

代码语言:javascript
复制
if request.method == "POST":

此外,在重定向中,您将消息放入参数中。我对此不太确定,但我想你也许能做到

代码语言:javascript
复制
messages.success ...
return redirect("/")

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

代码语言:javascript
复制
formtwo = IpdForm(request.POST)

因为request.POST已经显示为None,所以请执行以下操作

代码语言:javascript
复制
formtwo = IpdForm()

查看django form docs。此外,我非常确定您不能在表单中放置外键(在本例中是IpdForm和patient类)。相反,请从表单域中删除“patient”,然后执行以下操作

代码语言:javascript
复制
if formtwo.isvalid():
    formtwo.user_id = request.user.id

我希望这至少会有一点帮助,你可以解决你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57049256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档