Django 如何从“修改多人提交表单”;按住ctrl键可选择多个“;

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'),

我正在Django创建一个药物跟踪网站,在分配多次药物时遇到问题。目前我有一个药物模型:

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有没有一种简单的方法可以做到这一点?我一直在到处寻找这样做的方式,但还没有想出任何办法。任何帮助都将不胜感激