2015-02-24 2 views
0

У меня есть пользовательский Django администратора, в котором я указанный шаблон и пользовательские формы использоватьDjango администратора Пользовательские формы не спасающие

class StoryAdmin(BaseAdmin): 
    form = Edit_Story_Form 
    change_form_template = "CMS/Editorial/AdminStory/AdminStory.html" 

    def change_view(self, request, object_id, form_url='', extra_context=None): 
     extra_context = extra_context or {} 
     thing = Story.objects.get(pk=object_id) 
     extra_context['workflowstate'] = thing.workflowstate.title() 
     extra_context['last_updated'] = thing.updateddate 
     return super(StoryAdmin, self).change_view(request, object_id, form_url, extra_context=extra_context) 

admin.site.register(Story, StoryAdmin) 

форма ниже:

class Edit_Story_Form(ModelForm): 
headline = forms.CharField() 
subheadline = forms.CharField() 
add_block = forms.CharField(widget=forms.HiddenInput(), label='', required=False) 

class Meta: 
    model = Story 
    fields = [] 

def __init__(self, *args, **kwargs): 
    self.request = kwargs.pop('request', None) 
    request = self.request 
    super(Edit_Story_Form, self).__init__(*args, **kwargs) 
    zones = Zone.objects.filter(story=self.instance) 
    for zone in zones: 
     zone.form = Edit_Zone_Form(
      request.POST or None, 
      request.FILES or None, 
      instance = zone, 
      prefix = "zone_"+str(zone.id), 
     ) 
     blocks = Block.objects.filter(zone=zone).filter(has_parent=False) 
     for block in blocks: 
      block_forms = { 
       "Text":  Edit_Text_Block_Form, 
       "Image": Edit_Image_Block_Form, 
       "Video": Edit_Video_Block_Form, 
       "Embed": Edit_Embed_Block_Form, 
       "Code":  Edit_Code_Block_Form, 
       "Live Blog":Edit_Live_Blog_Block_Form, 
       "Tweet": Edit_Tweet_Block_Form, 
       "Quiz":  Edit_Quiz_Block_Form, 
       "Slideshow":Edit_Slideshow_Block_Form, 
       "Curated": Edit_Curated_Block_Form 
      } 
      block.form = block_forms[block.block_type](
       request.POST or None, 
       request.FILES or None, 
       instance = block.get_instance(), 
       prefix = "block_"+str(block.id), 
      ) 

def save(self, *args, **kwargs): 
    print("HI") 
    super(Edit_Story_Form, self).save(*args, **kwargs) 

Если я выберу пользовательский метод сохранения в форме, он отлично работает, а поля формы сохраняются. Однако мне нужно будет переопределить сохранение, потому что в этой форме есть другие формы, которые я буду проверять при сохранении.

Добавление в моей методе сохранения делает страница вырвет ошибку:

AttributeError at /admin/Editorial/story/1/ 
'NoneType' object has no attribute 'save' 

Я видел ссылки на save_object метод админа, но так как я на самом деле в надежде сохранить свою форму объект, Я не думаю, что это совсем то, что я ищу. Любые идеи, почему я могу получить эту ошибку?

Спасибо!

+0

Можете ли вы редактировать и форматировать Ваш код правильно? – thefourtheye

ответ

2

Я полагаю, вы забыли геЬигп

def save(self, *args, **kwargs): 
    print("HI") 
    return super(Edit_Story_Form, self).save(*args, **kwargs) 
+0

Это решило мою проблему! Я не знал, что мне нужно сохранить возврат в Admin (обычно я не с формами). Спасибо, что поймали это! –

Смежные вопросы