0
我有一些工作,但我相信它不是這樣做的最佳方式,因爲我有重複的代碼。 這是一個小部件,用於顯示客戶端可以屬於的組的複選框。一個客戶可以屬於多個組。過載ModelMultipleChoiceField __init__對很多很多
我確信我已經搞亂了widget的重載。
models.py
class Client(models.Model):
name = models.CharField(u'Name', max_length=250, unique=True)
groups = models.ManyToManyField('ClientGroup', related_name="client")
def __unicode__(self):
return self.name
class ClientGroup(models.Model):
name = models.CharField(u'Name', max_length=250, unique=True)
def __unicode__(self):
return self.name
forms.py
# -*- coding: utf-8 -*-
from django import forms
from models import ClientGroup
class ClientGroupForm(forms.ModelForm):
class Meta:
model = ClientGroup
fields = ('groups',)
groups = forms.ModelMultipleChoiceField(queryset=ClientGroup.objects.all(),
widget=forms.CheckboxSelectMultiple(),
label='',
required=False)
def __init__(self, client_id = None, *args, **kwargs):
super(ClientGroupForm, self).__init__(*args, **kwargs)
if client_id:
self.fields['groups'] = forms.ModelMultipleChoiceField(queryset = ClientGroup.objects.all(),
initial=ClientGroup.objects.filter(client = client_id),
widget=forms.CheckboxSelectMultiple(),
label='',
required=False)
def __unicode__(self):
return self.groups
views.py
def client(request, pk = 0):
client={}
if pk != 0:
client = Client.objects.get(pk = pk)
groupsForm = ClientGroupForm(pk)
context = {'client':client, 'groupsForm': groupsForm}
return render(request, 'client.html', context)
誰能告訴我一個更好的編碼forms.py的方法?
感謝