使用模型中的数据填充Django表单字段

时间:2020-09-04 16:08:21

标签: python django

我已经为此努力了两天。我想从员工模型中填充时间表表单字段作为选择字段/下拉列表。

这是我的文件,到目前为止我已经尝试过了。

MODEL.PY

class Employees(models.Model):
# MONTHLY = 'MONTHLY'
# SEMIMONTHLY = 'SEMIMONTHLY'
# BIWKEEKLY = 'BIWKEEKLY'
# WEEKLY = 'WEEKLY'
# DAILY = 'DAILY'
PAY_PERIODS = [
    ('Monthly', 'Monthly'),
    ('Bi-weekly', 'Bi-weekly'), 
    ('Weekly', 'Weekly'), 
    ('Daily', 'Daily'),
    ]
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
is_active = models.BooleanField(default=True, verbose_name='Employee is actives')
first_name = models.CharField(max_length=50, verbose_name='First Name.', null=True, blank=False)
middle_name = models.CharField(max_length=50, verbose_name='Middle Name or Initials.', null=True, blank=True)
last_name = models.CharField(max_length=50, verbose_name='Last Name.', null=True, blank=False)
full_name  = models.CharField(max_length=50, null=True, blank=True)
phone = PhoneField(blank=True, null=True)
email = models.EmailField(max_length=150, blank=True, null=True)
state = USStateField(null=True, blank=True)
street_address = models.CharField(max_length=150, blank=True, null=True, verbose_name='Street Address.')
zip_code = models.CharField(max_length=50, blank=True, null=True, verbose_name='Zip Code.')
hourly_rate = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
pay_frequency = models.CharField(max_length=100, choices=PAY_PERIODS, blank=True)
hire_date = models.TimeField(auto_now_add=True)


def __str__(self):
    return self.full_name

def save( self, *args, **kwargs ):
    self.full_name = f'{self.first_name} {self.middle_name} {self.last_name}'
    super().save( *args, **kwargs )



class Timesheet(models.Model):
"""A timesheet is used to collet the clock-ins/outs for a particular day
"""
employer = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
full_name = models.ForeignKey(Employees, on_delete=models.CASCADE, null=True, blank=False, verbose_name='Select YOUR Name')
start_date = models.DateField(auto_now_add=True, null=True)
end_date = models.DateField(null=True, blank=False)
time_worked = models.DateField(null=True, blank=False)   


def __str__(self):
    return self.full_name

VIEWS.PY#我尝试了基于函数和基于类的视图

class TimesheetView(CreateView):
model = Timesheet
fields = ('full_name', )
# form_class = TimesheetFrom
# queryset = Employees.objects.filter()
# print(queryset)


template_name = 'users/timesheet.html'
success_url = reverse_lazy('timesheet')




@login_required
def timesheet_view(request):
    if request.method == 'POST':
        form = TimesheetFrom(request.POST)
        if form.is_valid():
            emp = form.save(commit=False)
            emp.user_id = request.user.pk
            emp.save()
            return redirect('dashboard')
    else:
        form = TimesheetFrom()

    context = {
        'form': TimesheetFrom(),
    }
    return render(request, 'users/timesheet.html', context)

FORM.PY

class TimesheetFrom(forms.Form):
    class Meta:
        model = Timesheet
        fields = '__all__'
        exclude = ('employer', )
#This is the current state of the form but I did tried many approaches.

我确实在这里进行了广泛的搜索(Stackoverflow),但对我来说没有用例。喝杯咖啡,对您的帮助将不胜感激。

0 个答案:

没有答案
相关问题