standard MFV Pattern - pai-plznw4me/django-initializer GitHub Wiki
MFV(Model Form View) PAI νμ€ κ°μ΄λ
β οΈ μμ±μ€, μ€μ μ μ© κΈμ§
Model
λͺ¨λΈμ μ§μ ν λλ verbose μ΄λ¦μ μ§μ νμ standard_index table μ μμ±νκ±°λ standard_detail μμ νλͺ©μ νκΈ°ν λ μ¬μ©λλ€.
class Approval(models.Model):
requester = models.ForeignKey(to=CustomUser, on_delete=models.SET_NULL, null=True, verbose_name='μμ²μ')
name = models.CharField(max_length=100, verbose_name='μ λͺ©')
desc = models.TextField(verbose_name='μ€λͺ
')
request_datetime = models.DateTimeField(verbose_name='μμ² μκ°')
approval_date = models.DateField('μΉμΈ μκ°')
CHOICES = [('REQ', 'REQUEST'), ('UDR', 'Under review'), ('EUR', 'Emergency under Review'), ('CPL', 'COMPLETE')]
status = models.CharField(max_length=3, choices=CHOICES, default='UDR', verbose_name='μΉμΈ μν')
class Meta:
permissions = [('can_approval', # κΈ°λ‘λ κΆν μ΄λ¦
'Can approval')] # μ¬μ©μμκ² λ³΄μ¬μ§ κΆν μ΄λ¦
λͺ¨λΈ μμ± μ κ·μΉ
- verbose_name μ λͺ¨λ μ§μ νλ€.
- field μ μμλ c, r, u, d μμ μ€μ 보μ¬μ§ νλμ κΈ°λ³Έ μμμ΄λ€. (λ¬Όλ‘ μΆκ°μ μΌλ‘ λ³κ²½ν μ μλ€.)
- choice μ μμλ μ¬μ©λλ€. form μμ μλμ κ°μ΄ μ¬μ©λ μ μκΈ° λλ¬Έμ μμλ μ μμ±ν΄ λμ
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# μμ±μμ field μ 2κ°λ‘ μ νν¨. ('REQ', 'REQUEST'), ('EUR', 'Emergency under Review')
self.fields['status'].choices = Approval.CHOICES[:2] #<--
Form
-
HTML μ 보μ¬μ§λ νΌ μ 보λ Form class μμ κ΄λ¦¬νλ€.
-
μ λ ₯λ νΌ μ 보λ₯Ό μ²λ¦¬νλκ²λ Form class μμ κ΄λ¦¬νλ€. (μ ν¨μ± κ²μ¬, λ±)
-
μ λ ₯λ νΌ μ 보λ₯Ό μ μ₯νλκ²λ Form class μμ κ΄λ¦¬νλ€.
-
νΌ μ 보λ₯Ό λΉμ§λμ€ λ‘μ§μμ μ²λ¦¬νλκ²λ€μ View μμ μ²λ¦¬νλ€. λΉμ§λμ€ λ‘μ§ μ μλ νΌμμ μ²λ¦¬νλ€.
class ApprovalUpdateForm(forms.ModelForm):
class Meta:
model = Approval
fields, verbose_names, types = get_all_field_info(model, with_id=False)
field_names = verbose_names
widgets = apply_widget_by_field(model,
fields,
DateTime=forms.widgets.DateInput(attrs={'type': 'datetime-local'}),
Date=forms.widgets.DateInput(attrs={'type': 'date'}))
widgets['requester'] = forms.widgets.DateInput(attrs={'readonly': 'readonly'})
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# μμ±μμ field μ 2κ°λ‘ μ νν¨. ('REQ', 'REQUEST'), ('EUR', 'Emergency under Review')
self.fields['status'].choices = Approval.CHOICES[:2]