【问题标题】:Using class based views in django how would I insert data into a join table在 django 中使用基于类的视图如何将数据插入连接表
【发布时间】:2021-11-07 19:46:39
【问题描述】:

例如,我有 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
    )

当我从下拉列表中选择工作时,我还希望能够输入从事该特定工作的小时数并将其插入到联接表中。

如果有人可以提供有助于我实现这一目标的资源,我们将不胜感激。

【问题讨论】:

    标签: python django django-models django-forms django-templates


    【解决方案1】:

    与您对 job 字段所做的类似,可以将一个新字段添加到您的表单中,正如文档中解释的 here

    基本上:

    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']
    
    

    那么您应该在CreateTimeCardForm 中实现clean()save() 方法,以确保数据有效并创建与其他模型的关联,保存hours_worked

    【讨论】:

      猜你喜欢
      • 2014-03-21
      • 2019-08-29
      • 2021-01-24
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      • 2016-03-31
      相关资源
      最近更新 更多