我有两个型号:
class Parent:
...
class Child:
parent = models.ForeignKey(Parent)
Run Code Online (Sandbox Code Playgroud)
在Parent的模型管理员中,我想用自定义查询集显示Child的内联,而不仅仅是通过fk字段与父项相关的内联.
我试过了:
class ChildInline(admin.TabularInline):
model = Child
def get_queryset(self, request):
return Child.objects.filter(<my custom filter>)
class ParentAdmin(admin.ModelAdmin):
inlines = [ChildInline]
Run Code Online (Sandbox Code Playgroud)
但是内联中显示的唯一子项是那些满足两个过滤器的子项:与FK +我的自定义过滤器的父项相关.
是否有可能做到这一点?
编辑:
我现在看到的是BaseInlineFormSet正在过滤我创建的查询集,只保留与父项相关的子项,任何想法如何避免这种情况?
django/forms/models.py
class BaseInlineFormSet(BaseModelFormSet):
...
if self.instance.pk is not None:
qs = queryset.filter(**{self.fk.name: self.instance})
...
Run Code Online (Sandbox Code Playgroud) 在工作的django 1.9应用程序中设置geodjango时我遇到了这个错误.
我的应用程序生活在亚马逊EC2实例和RDS postgres实例中.
错误是:
django.core.exceptions.ImproperlyConfigured: 'django.contrib.gis.db.backends.postgis' isn't an available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
'mysql', 'oracle', 'postgresql', 'sqlite3
Run Code Online (Sandbox Code Playgroud)
我做了什么:
修改我的项目settings.py以包括:
修改我的app models.py以从django.contrib.gis.db导入模型,而不是django.db
有什么猜测我错过了吗?
假设django中有以下类结构:
class Base(models.Model)
class Derived(Base)
Run Code Online (Sandbox Code Playgroud)
这个基础对象(只是Base,而不是Derived)
b = Base()
b.save()
Run Code Online (Sandbox Code Playgroud)
我想从 b 创建一个派生对象。哪种方法是正确的?我试过了:
d = Derived(b)
d = Derived(base_ptr=b)
Run Code Online (Sandbox Code Playgroud)
谢谢
注意:我认为这是一个与“如何在 Django 中从模型基类转到派生类? ”不同的问题,因为我需要的是从现有基(且仅基)对象创建一个新的派生对象。在该问题中,它检查派生类是否已存在,然后返回它。就我而言,派生对象不存在。