Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

grappelli to hide Sortable field in Inline sortable (Django Admin)

From the grappelli customization document, it suggested that:

    The sortable-field will not automatically be hidden
 (use a Hidden Input Widget if needed).

However, i have searched for so long and have no idea on what is a "Hidden Input Widget" and how i could be implemented to a Django model. Here is my code:

     # models.py
class video(models.Model):
    category = models.ForeignKey(subCategory)
    index = PositionField('index')
    video_title = models.CharField(max_length=255, blank=True, null=True)
    video_desc = models.TextField(blank=True, null=True)
    main_img = S3EnabledImageField(upload_to='video_img', blank=True, null=True)
    small_img = S3EnabledImageField(upload_to='video_img', blank=True, null=True)
    mid_img = S3EnabledImageField(upload_to='video_img', blank=True, null=True)
    large_img = S3EnabledImageField(upload_to='video_img', blank=True, null=True)
    last_updated = models.DateField(auto_now=True)
    date_added = models.DateField()
    date_modified = models.DateField()
    date_published = models.DateField(blank=True, null=True)
    date_closed = models.DateField(blank=True, null=True)
    status = models.CharField(max_length=7,choices=STATUS_CHOICE)

    class Meta:
        ordering = ('index',)
        verbose_name = 'Video'
        verbose_name_plural = 'Video'

    def __unicode__(self):
        return self.video_title

class video_file(models.Model):
    video = models.ForeignKey(video)
    index = models.PositiveIntegerField()
    file_title = models.CharField(max_length=255, blank=True, null=True)
    #main_file = models.ImageField(upload_to='phoneso/video_file', blank=True, null=True)
    main_file = S3EnabledFileField(upload_to='video_file')
    resolution = models.CharField(max_length=50, blank=True, null=True)
    file_format = models.CharField(max_length=50, blank=True, null=True)
    date_added = models.DateField(auto_now_add=True)
    date_published = models.DateField(auto_now_add=True)
    status = models.CharField(max_length=7,choices=STATUS_CHOICE)

    class Meta:
        ordering = ('index',)
        verbose_name = 'Video File'
        verbose_name_plural = 'Video File'

    def __unicode__(self):
        return self.video.video_title

# admin.py

class video_fileInline(admin.TabularInline):
    fields = ('main_file' , 'resolution' , 'file_format' , 'status', 'index',)
    sortable_field_name = 'index'
    model = video_file
    extra = 1

class videoAdmin(admin.ModelAdmin):
    list_display = ('index' ,  'video_title', 'category' , 'date_added' , 'date_published' , 'status')
    search_fields = ['video_title', 'desc']
    readonly_fields = ('date_added','date_modified')
    list_filter = ['category']
    inlines = [video_fileInline]

class video_fileAdmin(admin.ModelAdmin):
    list_display = ('index' ,  '__unicode__' , 'file_title', 'resolution' , 'file_format' , 'main_file' , 'date_added' , 'date_published' , 'status')
    search_fields = ['video_title', 'desc']

Where should i implemented the suggested "Hidden Input Widget"?

Thank you.

like image 748
Bill Kary Avatar asked Aug 05 '11 15:08

Bill Kary


2 Answers

You can write a form for your model and use it in video_fileInline:

forms.py

class VideoFileForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(VideoFileForm, self).__init__(*args, **kwargs)
        # key should be your sortable-field - in your exaple it's *index*
        self.fields['index'].widget = forms.HiddenInput()

    class Meta:
        model = video_file

admin.py

class video_fileInline(admin.TabularInline):
    fields = ('main_file' , 'resolution' , 'file_format' , 'status', 'index',)
    form = VideoFileForm
    sortable_field_name = 'index'
    model = video_file
    extra = 1
like image 174
zaan Avatar answered Sep 21 '22 00:09

zaan


Now we have

GrappelliSortableHiddenMixin

Which you can use according to the documentation: http://django-grappelli.readthedocs.org/en/latest/customization.html#inline-sortables

like image 38
Camilo Nova Avatar answered Sep 21 '22 00:09

Camilo Nova