【问题标题】:django-ajax-selects raises Exception object not found for many to many admin inlinedjango-ajax-selects 引发 Exception object not found for many to many admin inline
【发布时间】:2013-12-18 09:29:24
【问题描述】:

我正在使用 django-ajax-selects 来帮助用户在 Django admin 中输入;特别是在“通过”模型内联的多对多关系中:

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))

setting.py

AJAX_LOOKUP_CHANNELS = {
    'item_code': ('appname.lookups', 'PartLookup'),
}

现在一切正常(在服务管理员中选择许多部分),直到我点击保存;我得到以下异常:

appname.lookups.PartLookup 对象位于 0x7f28742e5fd0> 找不到对象:6965933

6965933 是我在服务管理中选择的部分的代码...

我不明白是什么导致了这个异常。

感谢您的帮助

【问题讨论】:

    标签: python django django-ajax-selects


    【解决方案1】:

    原来问题是由于零件模型没有自动 id 作为主键引起的。 一旦我通过更改数据库添加自动主键并将 item_code 修改为唯一而不是主键,问题就解决了。

    在上述之后,您需要注意与 Part 模型有关系的模型,因为该关系是使用 item_code 引用的,而不是新添加的 id。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-24
      • 1970-01-01
      • 2020-12-17
      • 2022-12-28
      • 1970-01-01
      相关资源
      最近更新 更多