에서 사용하는 그 같은 일부 모델이 있습니다 장고 : 모델에 현재 사용자 설정하기 InlineModelAdmin
class BaseModel(models.Model):
created_by = models.ForeignKey(User, related_name="%(app_label)s_%(class)s_created")
created_date = models.DateTimeField(_('Added date'), auto_now_add=True)
last_updated_by = models.ForeignKey(User, related_name="%(app_label)s_%(class)s_updated")
last_updated_date = models.DateTimeField(_('Last update date'), auto_now=True)
class Meta:
abstract = True
class Image(BaseModel):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
name = models.CharField(_('Item name'), max_length=200, blank=True)
image = models.ImageField(_('Image'), upload_to=get_upload_path)
def save(self, *args, **kwargs):
if self.image and not GALLERY_ORIGINAL_IMAGESIZE == 0:
width, height = GALLERY_ORIGINAL_IMAGESIZE.split('x')
super(Image, self).save(*args, **kwargs)
filename = os.path.join(settings.MEDIA_ROOT, self.image.name)
image = PILImage.open(filename)
image.thumbnail((int(width), int(height)), PILImage.ANTIALIAS)
image.save(filename)
super(Image, self).save(*args, **kwargs)
class Album(BaseModel):
name = models.CharField(_('Album Name'), max_length=200)
description = models.TextField(_('Description'), blank=True)
slug = models.SlugField(_('Slug'), max_length=200, blank=True)
status = models.SmallIntegerField(_('Status'),choices=ALBUM_STATUSES)
images = generic.GenericRelation(Image)
내가 저장하고 업데이트 로그를 추적하기 위해 내 모든 모델 BASEMODEL 추상 모델을 사용합니다. ModelAdmin 클래스를 사용하여 자동으로 사용자 필드를 설정할 수 있습니다.
class BaseAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
if not change:
obj.created_by = request.user
obj.last_updated_by = request.user
obj.save()
class AlbumAdmin(BaseAdmin):
prepopulated_fields = {"slug": ("name",)}
list_display = ('id','name')
ordering = ('id',)
그게 효과가 있습니다. 모든 BaseAdmin 필드는 자동으로 채워집니다. 하지만 인라인으로 앨범에 이미지를 추가하고 싶습니다. 그래서, 난 그렇게 내 admin.py을 변경
from django.contrib.contenttypes import generic
class ImageInline(generic.GenericTabularInline):
model = Image
extra = 1
class AlbumAdmin(BaseAdmin):
prepopulated_fields = {"slug": ("name",)}
list_display = ('id','name')
ordering = ('id',)
inlines = [ImageInline,]
내가 페이지를 저장할 때 오류가 발생합니다 : gallery_image.created_by_id may not be NULL
를 저장 방법 이미지 모델의 첫 super(Image, self).save(*args, **kwargs)
행에. GenericTabularInline 클래스에는 재정의 할 save_model 메서드가 없기 때문입니다.
InlineModelAdmin 클래스에서 현재 사용자를 저장하고 메서드를 재정의하려면 어떻게해야합니까?
내가 또 다른 질문에 대한 해결책 발견
는 GenericTabularInline는 InlineModelAdmin HTTP에서 상속 : // 문서. nullpobug.com/django/trunk/django.contrib.contenttypes.generic.GenericTabularInline-class.html InlineModelAdmin에서 사용되는 양식을 지정할 수 있습니다. https://docs.djangoproject.com/en/dev/ref/ contrib/admin/# django.contrib.admin.InlineModelAdmin.form 아마 기본값으로 사용하는 ModelForm을 무시하고 초기 값을 추가 할 수 있습니까? http://stackoverflow.com/questions/2988548/overriding-initial-value-in-modelform –