2017-01-01 91 views
0

我在我的django formset中實現初始數據時遇到困難。在Django formset中預先填充部分初始數據

對於背景下,我建立了考勤應用,在那裏存在,並且需要每天進行評估出勤的學生名單。

我試圖做的是有上它具有上市日期的鏈路上的管理員點擊。然後,他們將被帶到數據網格,其中每行代表系統中的學生人數以及4列(學生姓名,日期,現在/不存在的下拉列表,筆記字段)。目標是讓學生姓名字段預填充學生模型中的學生列表,日期字段預填充用戶點擊的鏈接上的日期,出席和註釋字段爲用戶輸入。

任何幫助將不勝感激

謝謝!

-

Student model 

class Student(models.Model): 
    first_name = models.CharField(max_length=255) 
    last_name = models.CharField(max_length=255) 
    GENDER_CHOICES = (
     ('male', 'male'), 
     ('female', 'female'), 
    ) 
    gender = models.CharField(max_length=12, choices=GENDER_CHOICES, null=False, blank=False) 
    date_of_birth = models.DateField(auto_now=False, auto_now_add=False) 

    @property 
    def full_name(self): 
     return ''.join([self.first_name, '_', self.last_name]) 

    def __unicode__(self): 
     return self.full_name 

Attendance model 

class Attendance(models.Model): 
    student = models.ForeignKey('students.Student') 
    attendance_date = models.DateField(auto_now=False, auto_now_add=False) 
    STATUS_CHOICES = (
     ('present', ‘1’), 
     ('absent', ‘0’), 
    ) 
    status = models.CharField(max_length=12, choices=STATUS_CHOICES, null=False, blank=False) 
    notes = models.CharField(max_length=300, null=True, blank=True) 

    class Meta: 
     unique_together = ("student", "attendance_date") 

    def __unicode__(self): 
     return self.student 

Attendance form 

class AttendanceForm(forms.ModelForm): 
    class Meta: 
     model = Attendance 
     fields = ["student","attendance_date", "status", "notes"] 


View 

def add_attendance(request): 
    s = Student.objects.all().values() 
    AttendanceFormSet = formset_factory(AttendanceForm, extra=0) 
    formset = AttendanceFormSet(request.POST or None, initial=s) 
    if formset.is_valid(): 
     try: 
      instance = form.save(commit=False) 
      instance.save() 
      return HttpResponseRedirect('/') 
     except: 
      return HttpResponseRedirect('/') 
    context = { 
     "formset": formset, 
    } 
    return render(request, "group_attendance.html", context) 


Template 

<table id="formset" class="form"> 
{{ formset.management_form }} 

{% for form in formset.forms %} 
    {% if forloop.first %} 
    <thead><tr> 
    {% for field in form.visible_fields %} 
    <th>{{ field.label|capfirst }}</th> 
    {% endfor %} 
    </tr></thead> 
    {% endif %} 
    <tr> 
    {% for field in form.visible_fields %} 
    <td> 
    {# Include the hidden fields in the form #} 
    {% if forloop.first %} 
     {% for hidden in form.hidden_fields %} 
     {{ hidden }} 
     {% endfor %} 
    {% endif %} 
     {{ field.errors.as_ul }} 
     {{ field }} 
    </td> 
    {% endfor %} 
    </tr> 
{% endfor %} 
</table> 

回答

0

我真的不知道,如果我明白你的問題預想方式。我認爲你正在尋找一種方法來生成動態表單,這些表單預先填充了數據庫中的數據。

一個關於真正有用的物品,都可以在這裏https://jacobian.org/writing/dynamic-form-generation/

發現你沒有學生的固定電話號碼( - >表單域),所以你必須根據需要產生儘可能多的領域。所以你必須遍歷學生併爲每一個創建一個表單域。

你可以在上面的文章中找到它。下面是一個代碼片段及其解釋:

class UserCreationForm(forms.Form): 
    username = forms.CharField(max_length=30) 
    password1 = forms.CharField(widget=forms.PasswordInput) 
    password2 = forms.CharField(widget=forms.PasswordInput) 

    def __init__(self, *args, **kwargs): 
     extra = kwargs.pop('extra') 
     super(UserCreationForm, self).__init__(*args, **kwargs) 

     for i, question in enumerate(extra): 
      self.fields['custom_%s' % i] = forms.CharField(label=question) 
相關問題