django - 带有通过参数的Django ForeignKey
问题描述
对不起,标题错了,我试图改变它,但我不能。这并不意味着“通过”参数,而是“到”参数。
以下模型使我的代码
class DocAide(models.Model):
id = models.AutoField(primary_key=True)
pulse = models.DecimalField('Pulse', max_digits=3, decimal_places=0, blank=True, null=True)
weight = models.DecimalField('Weight (kg)', max_digits=3, decimal_places=0, blank=True, null=True)
bp_sys = models.DecimalField('BP Sys', max_digits=3, decimal_places=0, blank=True, null=True)
bp_dia = models.DecimalField('BP Dia', max_digits=3, decimal_places=0, blank=True, null=True)
temperature = models.DecimalField('Temp. deg C', max_digits=2, decimal_places=1, blank=True, null=True)
prescriptions = models.ForeignKey(PrescriptionLine, on_delete=models.CASCADE, blank=True, null=True)
scans = models.ManyToManyField(Scan, blank=True)
tests = models.ManyToManyField(LabTest, blank=True)
date = models.DateField(editable=False, default=timezone.now)
patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
created_by = models.ForeignKey(Doctor, on_delete=models.CASCADE, blank=True, null=True)
no_charge = models.BooleanField('No Charge from Patient', default=False)
doctors_notes = models.TextField('Patient is complaining about:', default='')
part_to_scan = models.CharField(max_length=100, default='N/A', blank=True, null=True)
part_to_xray = models.CharField(max_length=100, default='N/A', blank=True, null=True)
note = models.TextField(max_length=100, default='')
和
class PrescriptionLine(models.Model):
drug = models.ForeignKey(to=Drug, related_name='prescriptionlines', on_delete=models.CASCADE)
morning = models.CharField(validators=[int_list_validator], max_length=3, default=0)
midday = models.CharField(validators=[int_list_validator], max_length=3, default=0)
evening = models.CharField(validators=[int_list_validator], max_length=3, default=0)
night = models.CharField(validators=[int_list_validator], max_length=3, default=0)
days = models.CharField(validators=[int_list_validator], max_length=3, default=0)
tablets = models.CharField(validators=[int_list_validator], max_length=3, default=0)
我的表格如下所示:
class DocAideForm(forms.ModelForm):
class Media:
css = {'all': ('/static/admin/css/widgets.css',), }
js = ('/admin/jsi18n/',)
class Meta:
model = DocAide
fields = [ # 'no_charge',
'doctors_notes', 'scans', 'part_to_xray', 'part_to_scan', 'tests']
在 view.py 我有 inlineformset_factory
PrescriptionLineFormSet = inlineformset_factory(PrescriptionLine, DocAide, extra=1, fields=['drug', 'morning'])
有了这种结构,DocAide 的“药物”、“早晨”未知字段就会出现错误。
解决方案
要使用 inlilines 创建表单,您必须使用inlineformset_factory。您可以在官方 django 文档中查看如何使用它的示例。
模型.py:
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
视图.py
from django.forms import inlineformset_factory
BookFormSet = inlineformset_factory(Author, Book, fields=('title',))
author = Author.objects.get(name='Mike Royko')
formset = BookFormSet(instance=author)
推荐阅读
- zebra-printers - Zebra 打印机的位图打印性能
- javascript - 如何在 wordpress 主题中从 cdn 添加外部 js 文件和 jq 库?
- node.js - NodeJs Server 设置在 XXXX 端口上,相对路径 GET domain:XXXX/path 而不是 domain/path
- python - AWS Lambda:“参数验证失败”
- django - 使用来自 postgres JSONField 的注释数据更新 Django QS
- npm - 我不能 npm install express --save
- ios - 使用 Userdefaults 检查初始条件失败
- r - r data.table dcast - 通过函数调用传递函数列表
- swift - 快速,在具有复合谓词的提取结果控制器中找不到实体的键路径
- sql-server - 消息 102,级别 15,状态 1,第 6 行附近的语法不正确