所以,我有这个模型:
class Media(models.Model):
title = models.CharField(max_length=50, blank=True)
slug = models.SlugField(max_length=70, blank=True, editable=False)
class Meta:
abstract = True
class Photo(Media):
source = models.ImageField(upload_to='uploads/gallery/photo')
class Video(Media):
source = models.FileField(upload_to='uploads/gallery/photo')
class Item(models.Model):
content_type = models.ForeignKey(
ContentType,
limit_choices_to={'model__in': ['photo', ]},
on_delete=models.CASCADE,
)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
class Album(Media):
items = models.ManyToManyField(Item)
我如何将照片和视频的相册管理员设为内嵌,以便在创建相册时上传照片和视频?
当我尝试为照片制作内联并将其挂钩到相册管理员时,我收到错误“照片没有相册的外键”,很明显,从那里我认为应该有一种方法将相册管理所需的外键与内容相关联来自模型项目的对象。
注意:我特别不想要项目管理员。在模型后保存信号中创建项目。
答案 0 :(得分:0)
我认为这不是开箱即用的。但是你可以使用像django-smart-selects-generics这样的库。根据您的django版本,您可能需要更新一些文件。
安装适用于:
pip install django-smart-selects-generic
您还需要安装django-smart-selects。
然后在设置中添加两个应用。
INSTALLED_APPS = (
...
'smart_selects',
'smart_generic'
)
然后在你的admin.py中你可以这样做:
from smart_generic.form_fields import GenericChainedModelChoiceField
from django.forms.models import ModelForm
class TForm(ModelForm):
object_id = GenericChainedModelChoiceField('content_type','content_type',label=u'Content object',queryset=TargetRelation.objects.all())
class Meta:
model = TargetRelation
fields = ['target','content_type']
class TRAdmin(admin.ModelAdmin):
form = TForm
class TRInline(admin.TabularInline):
model = TargetRelation
form = TForm
class PlanetAdmin(admin.ModelAdmin):
inlines=[TRInline,]
根据您的django版本,您可能需要在widgets.py中替换:
Media = ChainedSelect.Media
通过
.media = ChainedSelect.Media
在smart_select views.py中添加:
import json as simplejson
并将return语句替换为:
return HttpResponse(json, content_type='application/json')