保存在 2 个不同的模型中,一个可以同时保存多个字段

Saving in 2 different models, One could have many fields saved at the same moment

我遇到了这个问题,我需要知道如何解决它,因为我需要它来做很多事情。 我会尽可能清楚地说明我需要什么。

首先我想做的是药物的医疗处方,所以我需要保存一个病人的数据和尽可能多的药物和医生要求的病人。 所以我有 2 个模型,患者数据模型和药物模型。

models.py

class RecipePatientData(models.Model):
    patient = models.ForeignKey(patientData)
    created_at = models.DateTimeField(auto_now_add=True)
    doctor = models.ForeignKey(DoctorData)
    observations = models.CharField(max_length=300)

class PrescriptionDrugs(models.Model):
    recipe_data = models.ForeignKey(RecipePatientData)
    prescripted_drug = models.ForeignKey(Drugs)
    quantity = models.IntegerField(default=0)
    day_of_treatment = models.IntegerField(default=0)

好吧,我的问题是我不知道谁来保存药物,因为我需要添加尽可能多的药物在同一个模板中,我有一个按钮可以为下一种药物添加新字段,我通过克隆主窗体来做到这一点。

我想知道 django 是否有一种方法可以转换列表中的字段或可以帮助我保存药物的方法,即使这些字段具有相同的名称。我尝试在视图中通过 cleaned_data 获取它们,但它只让我得到主字段,而不是克隆字段。

是的,您需要的是 FormSets,它可以让您在同一页面上处理多个表单。

举个例子:

# forms.py
form django import forms
from your.models import PrescriptionDrugs

class PrescriptionDrugsForm(forms.ModelForm):

    class Meta:
         model = PrescriptionDrugs
         fields = ("__all__")

于 views.py

# views.py
class YourView(FormView):
    template_name = 'template.html'
    form_class = formset_factory(PrescriptionDrugsForm, extra=3) #number of forms
    success_url = '/your-url/'

    def form_valid(self, form):
        form f in form:
            f.save()
        return super(YourView, self).form_valid(form)

于 template.html

<form method="POST">
    {% csrf_token %}
    {{ form.management_for }}
    {% for f in form %}
        {{ f.as_p }}
    {% endfor %}
</form>