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.
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
Now we have
GrappelliSortableHiddenMixin
Which you can use according to the documentation: http://django-grappelli.readthedocs.org/en/latest/customization.html#inline-sortables
精彩评论