#python #django #django-models #django-forms #django-templates
Вопрос:
например, у меня есть 3 класса, определенных как таковые
class Timecard(models.Model):
site_code = models.CharField(max_length=200)
contractor_name = models.CharField(max_length=200)
approved = models.BooleanField(default=False)
date = models.DateTimeField(default=timezone.now)
class Job(models.Model):
job_code = models.CharField(max_length=200)
description = models.CharField(max_length=200)
hourly_rate = models.DecimalField(max_digits=10, decimal_places=2)
max_hours = models.PositiveIntegerField()
time_card = models.ManyToManyField(Timecard, through="Timecard_Job")
class Timecard_Job(models.Model):
time_card = models.ForeignKey(Timecard, on_delete=models.CASCADE)
job = models.ForeignKey(Job, on_delete=models.CASCADE)
hours_worked = models.DecimalField(max_digits=10, decimal_places=2)
У меня есть следующий класс, определяющий мое мнение
class FillTimecard(CreateView):
model = Timecard
form_class = CreateTimeCardForm
template_name = 'timesheet/timesheetSubmit.html'
success_url = reverse_lazy("index")
наконец, у меня есть следующий класс формы
class CreateTimeCardForm(forms.ModelForm):
class Meta:
model = Timecard
fields = ['site_code', 'contractor_name', 'date','job']
job = forms.ModelMultipleChoiceField(
queryset=Job.objects.all(),
widget=forms.Select
)
Когда я выбираю задание из выпадающего списка, я хочу также иметь возможность вводить часы, отработанные на этом конкретном задании, и которые будут вставлены в таблицу объединения.
Если кто-то может просто предоставить ресурсы, которые помогут мне достичь этого, я был бы признателен.
Ответ №1:
Аналогично тому, что вы сделали с job
полем, в вашу форму можно добавить новое поле, как описано в документах здесь.
По существу:
class CreateTimeCardForm(forms.ModelForm):
job = forms.ModelMultipleChoiceField(
queryset=Job.objects.all(),
widget=forms.Select
)
hours_worked = forms.DecimalField(label="Hours worked", min_value=0, decimal_places=2)
class Meta:
model = Timecard
fields = ['site_code', 'contractor_name', 'date']
Затем вы должны реализовать clean()
и save()
методы, CreateTimeCardForm
чтобы убедиться, что данные верны, и создать ассоциации с другими моделями, сохранив hours_worked
.