我是 Django 新手(使用 1.5.1 版)并且一直在努力解决这个问题。
我有两个模型:问题和图像。每个问题可以有多个图像,每个图像只能与一个问题相关。我正在尝试制作一个管理界面,可以在其中添加问题并为每个问题添加多个图像。
问题是我有两个具有不同读写方案的数据库。当匿名用户读取数据时,它应该使用默认数据库,这很有效。另一方面,管理员应该通过管理界面读取和写入数据到名为“远程”的辅助数据库。其原因太复杂无法解释。
无论如何,我需要将问题和图像都保存到“远程”数据库中。问题在那里保存得很好,但由于某种原因,图像被保存到默认数据库中。我认为 formfield_for_foreignkeys 函数应该可以工作。它应该从“远程”数据库中读取(因为内联查询功能?),但当然没有找到图像。对默认数据库的查询会找到图像,但没有问题。
这是我的代码
from django.contrib import admin
from questionservice.models import Question, Image
class ImageTabularInline(admin.TabularInline):
model = Image
extra = 1
using = 'remote'
def queryset(self, request):
return super(ImageTabularInline, self).queryset(request).using(self.using)
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
return super(ImageTabularInline, self).formfield_for_foreignkey(db_field, request=request, using=self.using, **kwargs)
def formfield_for_manytomany(self, db_field, request=None, **kwargs):
return super(ImageTabularInline, self).formfield_for_manytomany(db_field, request=request, using=self.using, **kwargs)
class QuestionModelAdmin(admin.ModelAdmin):
inlines = [ImageTabularInline]
using = 'remote'
def save_model(self, request, obj, form, change):
obj.save(using=self.using)
def delete_model(self, request, obj):
obj.delete(using=self.using)
def queryset(self, request):
return super(QuestionModelAdmin, self).queryset(request).using(self.using)
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
return super(QuestionModelAdmin, self).formfield_for_foreignkey(db_field, request=request, using=self.using, **kwargs)
def formfield_for_manytomany(self, db_field, request=None, **kwargs):
return super(QuestionModelAdmin, self).formfield_for_manytomany(db_field, request=request, using=self.using, **kwargs)
admin.site.register(Question, QuestionModelAdmin)
我也尝试过使用路由器,但我没有找到路由管理界面以从其他数据库读取的方法。
有任何想法吗?谢谢!