2017-01-18 113 views
0

我使用django的modelformset_factory形式上傳和編輯圖像。目前,當我顯示形式它顯示與現有的數據形式如下:如何渲染django modelformset_factory形式手動

  • 字段名:目前:鏈接到圖像(例如:圖像/ filename.jpg)
  • 變化:圖像輸入欄
  • 檢查刪除框

如何更改(當前:鏈接到圖像(例如:images/filename.jpg))的顯示?想要改變圖像鏈接以顯示圖像名稱,並在用戶單擊時在新窗口中打開它。我檢查了django的文檔以手動呈現表單,但找不到相關信息。

謝謝!

型號:

class BaseImageAbstractModel(models.Model): 
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) 
    object_id = models.PositiveIntegerField() 
    content_object = GenericForeignKey('content_type','object_id') 

    class Meta: 
     abstract = True 

class ImageAbstractModel(BaseImageAbstractModel): 
     user = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE) 
     name = models.CharField(max_length=50, blank=True) 
     description = models.TextField(max_length=3000) 
     picture = models.ImageField(upload_to='images') 
     submit_date = models.DateTimeField(default=None) 
     is_public = models.BooleanField(default=True) 
     is_removed = models.BooleanField(default=False) 

     class Meta: 
      abstract = True 

     def __str__(self): 
      pass 

class Image(ImageAbstractModel):  
    class Meta: 
     verbose_name = "Image" 
     verbose_name_plural = "Images" 

     def __str__(self): 
      return self.name 
class ImageForm(BootstrapForm, ModelForm): 

    class Meta: 
     model = Image 
     fields = ('picture', 'name') 

ImgFormSet = modelformset_factory(Image, form=ImageForm, extra=5, can_delete=True) 
+0

難道您發佈相應的模型? –

回答

0

解決的辦法是繼承ClearableFileInput類並覆蓋以下內容:

class image_widget(ClearableFileInput): 
    initial_text = ugettext_lazy('') 
    template_with_initial = ('%(initial_text)s <a target="_blank" href="%(initial_url)s">%(initial)s</a> ' 
    '%(clear_template)s<br />%(input_text)s: %(input)s') 

    def get_template_substitution_values(self, value): 
     return { 
      'initial': 'Current Picture', 
      'initial_url': conditional_escape(value.url), 
    } 

class ImageForm(BootstrapForm, ModelForm): 

    class Meta: 
     model = Image 
     fields = ('picture', 'name') 
     widgets = {'picture': image_widget,} 

現在輸出看起來如下:

  • 字段名稱:當前照片
  • 更改:圖像輸入法d
  • 複選框以刪除

Django reference documentation