2015-11-05 3 views
1

Я пытаюсь создать динамическое поле, потому что мне нужно личное сообщение для каждой группы внутри модели Service.Проблема динамического автосохранения в Django Form

Итак, мне нужно создать несколько полей динамически в моей служебной форме.

Это мой ServiceForm:

class ServicesForm(forms.ModelForm): 

    role = forms.ModelChoiceField(queryset=Group.objects.all(), required=False) 

    def __init__(self, *args, **kwargs): 
     super(ServicesForm, self).__init__(*args, **kwargs) 

     try: 
      for elem in Group.objects.all(): 
      i = elem.pk 
      service = kwargs['instance'] 
      group = elem 
      if RoleMessage.objects.filter(service=service, role=group).count() > 0: 
       default = RoleMessage.objects.get(service=service, role=group).message 
      else: 
       default = "" 
      self.fields[elem.name+'_message'] = forms.CharField(widget=forms.Textarea(attrs={'class': str(i)+'_message'}), initial=default, required=False) 
     except: 
     pass 

    class Meta: 
     model = Services 
     fields="__all__" 

И это мой ServiceAdmin:

class ServicesAdmin(admin.ModelAdmin): 
    form = ServicesForm 

    list_display = (
    'serviceName', 
) 

    def get_fieldsets(self, request, obj=None): 
    fieldsets = super(ServicesAdmin, self).get_fieldsets(request, obj) 
    if obj != None: 
     limit = len(fieldsets[0][1]['fields']) - 1 
     index = 0 
     for elem in Group.objects.all(): 
      i = elem.pk 
      fieldsets[0][1]['fields'].insert(limit+index, elem.name+'_message') 
      index += 1 
    return ((None, {'fields': fieldsets[0][1]['fields'],}),) 

И это ошибка, что у меня, когда я пытаюсь открыть или создать службу:

Unknown field(s) (ServicesManager_message, Administradores_message) specified for Services. Check fields/fieldsets/exclude attributes of class ServicesAdmin. 

Мой model.py является:

class Services(models.Model): 
    serviceName = models.CharField(
     blank=False, 
     max_length=50 
    ) 

    class Meta: 
     db_table = "service" 

class RoleMessage(models.Model): 
    service = models.ForeignKey(Services, blank=False) 
    role = models.ForeignKey(Group, blank=False) 
    message = models.CharField(max_length=256, blank=False, default="") 

ответ

1

Я решил проблему. Некоторые вещи меняются в Django 1.8, а реализация - с 1,5.

Здесь я отвечаю на свои изменения, чтобы решить проблему.

На моем ServiceAdmin тоже меняется:

fieldsets = (
    (None, { 
     'fields': (
      'serviceName', 
     ), 
    }), 
) 

def get_form(self, request, obj=None, **kwargs): 
    kwargs['fields'] = flatten_fieldsets(self.declared_fieldsets) 
    return super(ServicesAdmin, self).get_form(request, obj, **kwargs) 

def get_fieldsets(self, request, obj=None): 
    fieldsets = super(ServicesAdmin, self).get_fieldsets(request, obj) 
    newfieldsets = list(fieldsets) 
    fields = ['role'] 
    if obj != None: 
     for elem in Group.objects.all(): 
      fields.append(elem.name+'_message') 
     newfieldsets.append(['Custom Message', {'fields': fields}]) 
    return newfieldsets 
Смежные вопросы