【问题标题】:Saving in 2 different models, One could have many fields saved at the same moment保存在 2 个不同的模型中,一个可以同时保存多个字段
【发布时间】:2016-06-22 21:50:42
【问题描述】:

我遇到了这个问题,我需要知道如何解决它,因为很多事情都需要它。 我会尽量清楚我需要什么。

首先我要做的是药物处方,所以我需要保存患者的数据以及尽可能多的药物和医生要求的患者。 所以我有 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 来获取它们,但它只能获取主字段,而不是克隆字段。

【问题讨论】:

    标签: python django list django-models django-crispy-forms


    【解决方案1】:

    是的,您需要的是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>
    

    【讨论】:

    • 如果你使用带有formsSet的模型表单,在内部方法form_valid(self, form): for f in form: f.save()
    • 有没有办法不定义额外表格的数量并做到动态?
    • 试试this
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多