下面的模型显示了一个简单的GenericForeignKey关系。它已经以这种方式设置,允许任何其他模型重用Image。
class Image(models.Model):
name = models.CharField(max_length=150)
desc = models.TextField(max_length=400)
resource = models.ImageField(upload_to='imgs/generic/%Y/%m/%d')
def __unicode__(self):
return self.name
class ImageItem(models.Model):
image = models.ForeignKey(Image, related_name='items', db_index=True)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField(db_index=True)
object = generic.GenericForeignKey('content_type','object_id')
class Meta:
unique_together = (('image', 'content_type', 'object_id'),)
def __unicode__(self):
return u'%s [%s]' % (self.object, self.image)
class ImageInline(generic.GenericTabularInline):
model = ImageItem
目前在另一个模型的管理员中使用ImageInline将显示一个列表框,其中包含系统中的所有图像。
是否可以让内联管理员显示实际的图像模型,仅显示分配给正在编辑的模型的图像?因此,允许用户立即看到附加到正被添加/编辑的模型的图像上的所有相关信息。以及能够添加/删除相关图像。
提前感谢您对此的帮助。
答案 0 :(得分:2)
您必须将代码更改为:
class Image(models.Model):
name = models.CharField(max_length=150)
desc = models.TextField(max_length=400)
resource = models.ImageField(upload_to='imgs/generic/%Y/%m/%d')
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField(db_index=True)
object = generic.GenericForeignKey('content_type','object_id')
class Meta:
unique_together = (('resource', 'content_type', 'object_id'),)
def __unicode__(self):
return u'%s [%s]' % (self.object, self.resource)
class ImageInline(generic.GenericTabularInline):
model = Image
class MyModelAdmin(admin.ModelAdmin):
inlines = [
ImageInline,
]
这样,当您在管理员中添加/更改MyModel时,您可以将图像添加为内联。
更新:
文件浏览器字段解决方案:
class Image(models.Model):
name = models.CharField(max_length=150)
desc = models.TextField(max_length=400)
resource = FileBrowseField("Image", max_length=200, directory="imgs/generic/%Y/%m/%d", extensions=['.jpg', '.gif', '.png'], format='Image')
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField(db_index=True)
object = generic.GenericForeignKey('content_type','object_id')
class Meta:
unique_together = (('resource', 'content_type', 'object_id'),)
def __unicode__(self):
return u'%s [%s]' % (self.object, self.resource)
class ImageInline(generic.GenericTabularInline):
model = Image
class MyModelAdmin(admin.ModelAdmin):
inlines = [
ImageInline,
]
有关filebrowser字段的更多信息,请访问:http://code.google.com/p/django-filebrowser/wiki/installationfilebrowsefield