Grappelli, чтобы скрыть Сортируемое поле в Inline sortable (Джанго Админ) - PullRequest
3 голосов
/ 05 августа 2011

Из документа настройки grappelli было предложено:

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

Однако я так долго искал и понятия не имею, что такое «скрытый виджет ввода» и как я могу быть реализован в модели Django. Вот мой код:

     # 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']

Где мне реализовать предложенный «скрытый виджет ввода»?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 06 августа 2011

Вы можете написать форму для своей модели и использовать ее в 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
1 голос
/ 31 января 2015

Теперь у нас есть

GrappelliSortableHiddenMixin

Который вы можете использовать согласно документации: http://django -grappelli.readthedocs.org / ен / последний / customization.html # инлайн-sortables

...