Django Non-Rel:即使存在对象,QuerySet也始终为空

时间:2011-08-06 14:27:42

标签: django-nonrel

filter()和all()无法处理django-nonrel

>>> Item.objects.get(display_name='Test Item')
<Item: Test Item>
>>> Item.objects.all()
[]
>>> Item.objects.get(display_name='Test Item')
<Item: Test Item>
>>> Item.objects.filter(display_name='Test Item')
[]
>>> 

在以下型号上:

class Item(models.Model):
    item_id = models.AutoField(
        primary_key = True,
        db_column = 'id'
    )
    menu = models.ForeignKey(
        Menu,
        verbose_name = l('Menu'),
        related_name = 'items',
        db_column = 'menu_id'
    )
    display_name = models.NameField(
        db_column = 'display_name'
    )
    description = models.DescriptionField(
        db_column = 'description'
    )
    url = models.CharField(
        max_length = 255,
        verbose_name = l('Path'),
        db_column = 'url'
    )

    #/////////////////////////////////////////////////////////////////////
    #//// Flags
    #/////////////////////////////////////////////////////////////////////
    external = models.BooleanField(
        editable = False,
        default = False,
        db_column = 'external'
    )
    new_window = models.BooleanField(
        verbose_name = l('Open in new window'),
        default = False,
        db_column = 'new_window'
    )
    enabled = models.EnabledField(
        db_column = 'is_enabled'
    )
    expanded = models.BooleanField(
        verbose_name = l('Expanded by default'),
        editable = False, # Will be implemented in future versions.
        default = False,
        db_column = 'is_expanded'
        )
    collapsible = models.BooleanField(
        verbose_name = l('Collapsible'),
        help_text = l('If this item has children, indicates if they may be collapsed'),
        db_column = 'is_collapsible'
    )

    #/////////////////////////////////////////////////////////////////////
    #//// Item tree
    #/////////////////////////////////////////////////////////////////////
    parent = models.ForeignKey(
        'self',
        verbose_name = l('Parent'),
        related_name = 'children',
        blank = True,
        null = True,
        db_column = 'parent_id'
    )
    has_children = models.BooleanField(
        editable = False,
        default = False,
        db_column = 'has_children'
    )
    depth = models.PositiveIntegerField(
        editable = False,
        default = 1,
        db_column = 'depth'
    )
    weight = models.IntegerField(
        verbose_name = l('Weight'),
        default = 0,
        db_column = 'weight'
    )

    #/////////////////////////////////////////////////////////////////////
    #//// HTML properties
    #/////////////////////////////////////////////////////////////////////
    id = models.CharField(
        max_length = 255,
        verbose_name = l('Id'),
        help_text = l('By default, the rendered link id will be in the format [item.name]-[item.pk]. Use this field to override'),
        default = '',
        blank = True,
        db_column = 'link_id'
    )
    cls = models.CharField(
        max_length = 255,
        verbose_name = l('Class'),
        help_text = l('By default, the rendered link class will be in the format [menu.name]. Use this field to append extra classes.'),
        default = '',
        blank = True,
        db_column = 'class'
    )
    title = models.CharField(
        max_length = 255,
        verbose_name = l('Title'),
        help_text = l('By default, the rendered link title will be item.name. Use this field to override.'),
        default = '',
        blank = True,
        db_column = 'title'
    )
    target = models.CharField(
        max_length = 255,
        verbose_name = l('Target'),
        blank = True,
        default = '',
        db_column = 'target'        
    )
    rel = models.CharField(
        max_length = 255,
        verbose_name = l('Rel'),
        blank = True,
        default = '',
        db_column = 'rel'        
    )

class Meta:
        db_table = 'menu_item'
        verbose_name = l('Menu Item')
        verbose_name_plural = l('Menu Items')
        ordering = ['menu','parent','weight']

像Django-Nonrel上的filter()和all()这样的QuerySets保持返回空,即使数据库中存在对象。 get()工作正常。

我也尝试删除元属性,但无济于事。

1 个答案:

答案 0 :(得分:0)

问题在于class Meta: ordering = ['menu','parent','weight']。 这导致“内部联接”声明django-norel不支持或实现它。