Django admin でのユーザー入力を容易にするために django-ajax-selects を使用しています。具体的には、「スルー」モデルがインライン化されている多対多の関係で:
models.py
class Part(models.Model):
item_code = models.CharField(max_length=100, primary_key=True)
name = models.CharField('Part Name', max_length=128)
def __unicode__(self):
return self.item_code
class Service(models.Model):
parts = models.ManyToManyField(Part, through='ServicePart')
class ServicePart(models.Model):
STATE_CHOICES = (
('N', 'New'),
('U', 'Used'),
)
service = models.ForeignKey(Service)
part = models.ForeignKey(Part)
cost = models.DecimalField ...
state = models.CharField(max_length=1, choices=STATE_CHOICES)
admin.py
class ServicePartInline(AjaxSelectAdminTabularInline):
model = ServicePart
form = make_ajax_form(ServicePart, {
#item_code is a lookup channel
'part': 'item_code',
},
show_help_text=True)
extra = 2
class ServiceAdmin(admin.ModelAdmin):
inlines = [ServicePartInline,]
lookups.py
class PartLookup(LookupChannel):
model = Part
def get_query(self, q, request):
return Part.objects.filter(Q(item_code__icontains=q) | Q(name__istartswith=q)).order_by('name')
def get_result(self, obj):
return obj.name
def format_match(self, obj):
return u"%s<div><i>%s</i></dev>" % (escape(obj.item_code), escape(obj.name))
def format_item_desplay(self, obj):
return u"%s<div><i>%s</i></dev>" % (escape(obj.item_code), escape(obj.name))
設定.py
AJAX_LOOKUP_CHANNELS = {
'item_code': ('appname.lookups', 'PartLookup'),
}
これで、保存を押すまで、すべてが正常に機能します (サービス管理内の多くの部分を選択)。次の例外が発生します。
0x7f28742e5fd0 の appname.lookups.PartLookup オブジェクト > オブジェクトが見つかりません: 6965933
6965933 は、サービス管理内で選択した部分のコードです...
この例外の原因がわかりません。
あなたの助けに感謝します