1

我有一个带有 auto_now 的模型,并为更新和创建字段设置了 auto_now_add:

class HotelProfiles(models.Model):
  fe_result_id = models.AutoField(primary_key=True)
  fe_created_date = models.DateTimeField(verbose_name='Created',
                                         blank=True,
                                         auto_now_add=True)
  fe_updated_date = models.DateTimeField(verbose_name='Updated',
                                         blank=True, 
                                         auto_now=True)

在管理员中,它显示这两个字段,但使它们不可编辑。它们似乎没有传递给我要呈现的表单。我不希望它们可编辑,但我想显示在我的表单顶部。我怎样才能做到这一点?

这是在我的 HotelProfilesAdmin 类中:

readonly_fields = ('fe_result_id', 'fe_created_date', 'fe_updated_date', 'fe_owner_uid')
#date_hierarchy = 'lto_end_date' 
fieldsets = (
    ("Internal Use Only", {
        'classes': ('collapse',),
        'fields': ('fe_result_id', 'fe_created_date', 'fe_owner_uid', 'fe_updated_date', 'fe_result_status')
    }),
4

2 回答 2

2
  • 将您想要的字段设为只读
  • 显式覆盖此管理表单中可用的字段(只读字段将存在但只读)

例子:

from django.contrib import admin

class HotelProfilesAdmin(admin.ModelAdmin) :
    # Keep the fields readonly
    readonly_fields = ['fe_created_date','fe_updated_date']

    # The fields in the order you want them
    fieldsets = (
        (None, {
            'fields': ('fe_created_date', 'fe_updated_date', ...other fields)
        }),
    )

# Add your new adminform to the site
admin.site.register(HotelProfiles, HotelProfilesAdmin)
于 2012-04-05T18:01:58.310 回答
1

为了他人的利益,我想出了一个方法来做到这一点。我是 Django 的新手,所以如果有更好的方法,我很想听听。视图代码如下。我不确定 Django 是否没有从查询中返回字段,但我发现确实如此。因此,我不理解的表单渲染中的某些内容删除了这些字段,因此无法渲染它们。因此,我在渲染之前将它们复制到一个名为 read_only 的字典中并将其传递。

try:
    hotel_profile = HotelProfiles.objects.get(pk=hotel_id)
    read_only["created_on"] = hotel_profile.fe_created_date
    read_only["updated_on"] = hotel_profile.fe_updated_date
    f = HotelProfileForm(instance=hotel_profile)
    #f.save()
except:
    f = HotelProfileForm()
    print 'rendering blank form'
return render_to_response('hotels/hotelprofile_form.html', {'f' : f, 'read_only': read_only}, context_instance=RequestContext(request))
于 2012-04-05T20:08:10.827 回答