在Django中,我有一個模型表示具有外鍵給另一個模型的描述的圖像,此模型使用StdImageField來保存圖像並自動創建縮略圖。該模型還有一個選擇域,其中有兩個選項代表圖像的類型。Django StdImage在使用代理模型時不起作用
在我的管理員中,我將這個模型顯示爲主模型的內聯,但是我想在管理員中將此模型顯示爲兩個單獨的內聯,就好像它們是兩個單獨的對象類型,我正在使用2個代理模型並註冊它們。
問題是,當我使用這個代理模型的StdImageField不會調整上傳的圖像,也不創建縮略圖。我相信這是由於問題描述here
我的代碼爲以下(精簡爲目的):從Django中
models.py
from django.db import models
from stdimage import StdImageField
class MainModel(models.Model):
some_field = models.CharField(max_length = 2)
class SomeModel(models.Model):
SOME_MODEL_TYPE_CHOICES = (
('t1','Type 1'),
('t2','Type 2'),
)
main_model = models.ForeignKey(to='MainModel')
pic = StdImageField(upload_to='img', size =(200,200), thumbnail_size = (100,100))
pic_type = models.CharField(max_length = 2, choices = SOME_MODEL_TYPE_CHOICES)
class SomeModelT1Manager(models.Manager):
def get_query_set(self):
return super(SomeModelT1Manager, self).get_query_set().filter(pic_type='t1')
class SomeModelT1(SomeModel):
objects = SomeModelT1Manager()
class Meta:
proxy = True
def save(self, *args, **kwargs):
if not self.pk:
self.pic_type = 't1'
super(SomeModelT1, self).save(*args,**kwargs)
class SomeModelT2Manager(models.Manager):
def get_query_set(self):
return super(SomeModelT2Manager, self).get_query_set().filter(pic_type = 't2')
class SomeModelT2(SomeModel):
objects = SomeModelT2Manager()
class Meta:
proxy = True
def save(self, *args, **kwargs):
if not self.pk:
self.pic_type = 't2'
super(SomeModelT2, self).save(*args, **kwargs)
admin.py
.contrib
import admin
from test_app.models import *
class SomeModelT1Inline(admin.StackedInline):
model = SomeModelT1
exclude = ('pic_type',)
class SomeModelT2Inline(admin.StackedInline):
model = SomeModelT2
exclude = ('pic_type',)
class MainModelAdmin(admin.ModelAdmin):
inlines = [
SomeModelT1Inline,
SomeModelT2Inline
]
admin.site.register(MainModel, MainModelAdmin)
所以我的問題是有沒有另一種做法,或者我如何糾正這個問題stdimage。我想這個問題可能是contribute_to_class
不會被調用在StdImageField在代理方面時,主要是因爲__metaclass__
未設置爲models.SubfieldBase
在django documentation for custom model fields
的解釋然而,這只是一個野生猜測Django的的FileField或ImageField的不設置要麼。
你能提供一些示例代碼與此? – armonge
那麼看看上面的編輯,不要怪我,如果它失敗:O –
不工作,發送方法不會讓我包括一個實例參數,接收器裝飾器需要一個kwargs參數。 – armonge