【问题标题】:Implementing an inline to represent a ListField in Django-nonrel在 Django-nonrel 中实现内联来表示 ListField
【发布时间】:2017-07-08 19:07:37
【问题描述】:

是否可以使用类似于 Django 管理员中的内联关系项的东西来表示 ListField 中的嵌入式模型?

例如,我有以下型号:

class CartEntry(model.Model):
    product_name=model.CharField( max_length=20 )
    quantity = model.IntegerField()

class Cart(model.Model):
    line_items = ListField(EmbeddedModelField('CartEntry'))

我尝试过使用标准内联,但我知道这是不对的:

class CartEntryInline( admin.StackedInline ):
    model=CartEntry

class CartAdmin(admin.ModelAdmin)
    inlines=[CartEntryInline]

但显然这不起作用,因为没有外键关系。有没有办法在 django-nonrel 中做到这一点?

【问题讨论】:

    标签: python django mongodb django-nonrel nosql


    【解决方案1】:

    开箱即用并不容易。您需要在 Django 的管理模块中管理 ListField 和 EmbeddedModelField 类型的字段,并进行一些修改来完成它。您必须实现两个部分:

    Use EmbeddedModelField in Django's admin

    您需要定义一个处理 EmbeddedModelField 对象的类,以使其与 Django 的管理员一起工作。 Here 是一个链接,您可以在其中找到出色的示例代码。下面只是演示的代码块:

    将此类添加到您的models.py 文件中,并在Cart 模型中使用EmbedOverrideField 而不是EmbeddedModelField

    class EmbedOverrideField(EmbeddedModelField):
        def formfield(self, **kwargs):
            return models.Field.formfield(self, ObjectListField, **kwargs)
    

    forms.py 中实现一个具有两个方法的类:

    class ObjectListField(forms.CharField):
        def prepare_value(self, value):
            pass # you should actually implement this method
    
        def to_python(self, value):
            pass # Implement this method as well
    

    Use ListFields in Django's admin

    您还需要定义一个处理 ListField 对象的类,以使其与 Django 的管理员一起工作。 Here 是一个链接,您可以在其中找到出色的示例代码。下面只是演示的代码块:

    将此类添加到您的models.py 文件和ItemsField,而不是Cart 模型中的ListField

    class ItemsField(ListField):
        def formfield(self, **kwargs):
            return models.Field.formfield(self, StringListField, **kwargs)
    

    forms.py 中实现一个具有两个方法的类:

    class StringListField(forms.CharField):
        def prepare_value(self, value):
            pass # you should actually implement this method
    
        def to_python(self, value):
            pass # Implement this method as well
    

    【讨论】:

      猜你喜欢
      • 2011-07-24
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      • 2012-04-15
      • 2011-04-22
      相关资源
      最近更新 更多