Django 如何从“修改多人提交表单”;按住ctrl键可选择多个“;
我正在Django创建一个药物跟踪网站,在分配多次药物时遇到问题。目前我有一个药物模型:Django 如何从“修改多人提交表单”;按住ctrl键可选择多个“;,django,forms,many-to-many,user-input,Django,Forms,Many To Many,User Input,我正在Django创建一个药物跟踪网站,在分配多次药物时遇到问题。目前我有一个药物模型: class Medication(models.Model): UNDEFINED = '' MILIGRAMS = 'mg' MILIEQUIVILENT = 'MEQ' MILILITERS = 'ml' MEASUREMENT_CHOICES = [ (UNDEFINED, ' '), (MILIGRAMS, 'mg'), (MILIEQUIVILENT, 'MEQ'),
class Medication(models.Model):
UNDEFINED = ''
MILIGRAMS = 'mg'
MILIEQUIVILENT = 'MEQ'
MILILITERS = 'ml'
MEASUREMENT_CHOICES = [
(UNDEFINED, ' '),
(MILIGRAMS, 'mg'),
(MILIEQUIVILENT, 'MEQ'),
(MILILITERS, 'ml'),
]
ORAL = 'orally'
OPTICALLY = 'optically'
NASALLY = 'nasally'
OTTICALLY = 'per ear'
SUBLINGUAL = 'sublingual'
SUBCUTANEOUS = 'subcutaneous'
PER_RECTUM = 'per rectum'
TOPICAL = 'topical'
INHALATION = 'inhalation'
ROUTE_CHOICES = [
(ORAL, 'orally'),
(OPTICALLY, 'optically'),
(NASALLY, 'nasally'),
(OTTICALLY, 'per ear'),
(SUBLINGUAL, 'sublingual'),
(SUBCUTANEOUS, 'subcutaneous'),
(PER_RECTUM, 'per rectum'),
(TOPICAL, 'topical'),
(INHALATION, 'inhalation'),
]
AS_NEEDED = "PRN"
EVERY = "every"
EVERY_TWO = "every two"
EVERY_THREE = "every three"
EVERY_FOUR = "every four"
EVERY_FIVE = "every five"
EVERY_SIX = "six"
EVERY_SEVEN = "seven"
EVERY_EIGHT = "eight"
EVERY_NINE = "nine"
FREQUENCY_NUM = [
(AS_NEEDED, "PRN"),
(EVERY, "every"),
(EVERY_TWO, "every two"),
(EVERY_THREE, "every three"),
(EVERY_FOUR, "every four"),
(EVERY_FIVE, "every five"),
(EVERY_SIX, "six"),
(EVERY_SEVEN, "seven"),
(EVERY_EIGHT, "eight"),
(EVERY_NINE, "nine"),
]
MINUTE = 'minute'
HOUR = "hour"
DAY = "day"
WEEK = 'week'
MONTH = "month"
FREQUENCY_MEASUREMENT = [
(MINUTE, 'minute'),
(HOUR, "hour"),
(DAY, "day"),
(WEEK, 'week'),
(MONTH, "month"),
]
ONE_TAB = 'tab'
MULTIPLE_TABS = 'tabs'
HALF_TAB = 'half of a tab'
THIRD_TAB = 'third of a tab'
QUARTER_TAB = 'quarter of a tab'
ONE_DROP = 'drop'
MULTIPLE_DROPS = 'drops'
FORM_FACTORS = [
(ONE_TAB, 'tab'),
(MULTIPLE_TABS, 'tabs'),
(HALF_TAB, 'half of a tab'),
(THIRD_TAB, 'third of a tab'),
(QUARTER_TAB, 'quarter of a tab'),
(ONE_DROP, 'drop'),
(MULTIPLE_DROPS, 'drops')
]
client = models.ForeignKey(
Client_Medlist,
blank=True,
default=None,
on_delete=models.CASCADE)
name = models.CharField(max_length=255)
drug_class = models.CharField(max_length=255)
dosage = models.FloatField(default=10)
measurement = models.CharField(
max_length=3,
choices=MEASUREMENT_CHOICES,
default=MILIGRAMS,)
number_of_form = models.IntegerField(default=1)
drug_form_factor = models.CharField(
max_length=255,
choices=FORM_FACTORS,
default=ONE_TAB,
)
route = models.CharField(
max_length=255,
choices=ROUTE_CHOICES,
default=ORAL,)
frequency_num = models.CharField(
max_length=255,
choices=FREQUENCY_NUM,
default=EVERY,)
frequency_measurement = models.CharField(
max_length=255,
choices=FREQUENCY_MEASUREMENT,
default=DAY,)
times_taken = models.ManyToManyField(Medication_Times)
start_date = models.DateField(default=timezone.now)
is_med_active = models.BooleanField(default=True)
transcription_author = models.ForeignKey(User, on_delete=models.PROTECT)
transcription_date = models.DateField(default=timezone.now)
def __str__(self):
return self.name
该模型与用药时间模型具有“多个”关系:
class Medication_Times(models.Model):
times_taken = models.TimeField(default=timezone.now, auto_now=False, auto_now_add=False)
display_name = models.CharField(default='Scheduled Time', max_length=255)
def __str__(self):
return self.times_taken.strftime('%I:%M %p')
对于指向此页面的视图,我使用LoginRequiredMixin和CreateView:
class MedicationNew(LoginRequiredMixin, CreateView):
model = Medication
template_name = 'client_profile/new_med.html'
context_object_name = 'posts'
fields = ['client', 'name', 'start_date', 'drug_class', 'dosage', 'measurement', 'route', 'frequency_num', 'frequency_measurement', 'times_taken']
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
这一切都很好,但如果时间间隔的最大值是15分钟,当用户创建新药物添加到客户的图表时,时间显示在一个长滚动列表中,只需按住ctrl键并单击以选择多个
在需要尽可能方便用户的地方,我认为选择一个时间,然后将其添加到滚动选择下方显示的框中可能是更好的方法。这样,如果用户选择了错误的东西,它将在框中,以便轻松删除,并且可以轻松地向后滚动并选择正确的时间。然后在选择正确的时间后,可以提交整个表格
在Django有没有一种简单的方法可以做到这一点?我一直在到处寻找这样做的方式,但还没有想出任何办法。任何帮助都将不胜感激