使用带有查询集的modelformset和来自模型实例的额外信息

时间:2018-10-27 21:56:13

标签: python django

我想用过滤器进行查询,然后在页面中显示要在Django中编辑的属性,如何实现 我的模型:

class DailyReport(models.Model):
    userInfo = models.ForeignKey(UserInfo, on_delete=models.CASCADE)
    enterTime = models.DateTimeField(null=True, blank=True)
    exitTime = models.DateTimeField(null=True, blank=True)  # add null=True in production mode
    overTimeWork = models.FloatField(default=0)
    absenceTime = models.FloatField(default=0)
    restTime = models.FloatField(default=0)
    archive = models.BooleanField(default=False)
    rest = models.BooleanField(default=False)
    absence = models.BooleanField(default=False)


class UserInfo(models.Model):
    name = models.CharField(max_length=200, verbose_name='نام')
    family = models.CharField(max_length=200, verbose_name="نام خانوادگی")
    job = models.CharField(max_length=400, verbose_name="شغل")
    startWorkTime = models.TimeField(verbose_name="ساعت شروع")
    finishWorkTime = models.TimeField(verbose_name="ساعت اتمام")
    allowedWorkTime = models.IntegerField(verbose_name=" ساعت کار")
    allowedabsenceTime = models.FloatField()
    allowedOverTimeWork = models.FloatField()  # better define custom field for getting hour
    fixedSalary = models.FloatField(verbose_name="حقوق ثابت")  # define custom  Field for Salary
    overTimeHourSalary = models.FloatField(
    verbose_name="حقوق ساعت اضافه کار")  # define Field as above for Enter hour salary
    absenceTimeHourSurcharge = models.FloatField(verbose_name="جریمه ساعت غیبت")
    restTimeHourSubtraction = models.FloatField(verbose_name=" کسر ساعت مرخصی")

我的模型形式:

class DailyAbsenceRestForm(forms.ModelForm):
    class Meta:
        model = DailyReport
        fields = ['absence', 'rest']

我的modelformset:

my_formset = modelformset_factory(DailyReport, form=DailyAbsenceRestForm)
formset=my_formset(queryset=DailyReport.objects.filter(exitTime__day=13).filter(userInfo__name='hassan'))

但是当我在Django模板中打印表单集时,它仅显示我的休息和缺勤字段,但我想显示有关DailyReport名称和家庭enterTime exitTime和...的信息。 如何在Django中实现?

2 个答案:

答案 0 :(得分:0)

尝试删除fields = ['absence', 'rest']

答案 1 :(得分:0)

  

当我在Django模板中打印表单集时,它只显示休息和缺席

该行为就是您在DailyAbsenceRestForm.Meta.fields属性中要求的。

如果要查看其他字段,则需要允许它们出现在表单上。 Meta.fields规范用于restrict what fields will appear

要么完全删除Meta.fields限制,要么扩大该限制以包括要显示的字段。

如果要更改表单上字段的行为,请使用options on the form fields themselves