Используя представления на основе классов в django, как мне вставить данные в таблицу join
Например, у меня есть 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
)
Когда я выбираю работу из выпадающего списка, я хочу также иметь возможность ввести часы, отработанные на этой конкретной работе, и вставить их в таблицу объединения.
Если кто-то может предоставить ресурсы, которые помогут мне достичь этого, буду признателен.
Подобно тому, что вы сделали с полем 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
.