2012-02-17 37 views
5

是否可以使用類似於Django管理員的內聯關係項來表示ListField中的嵌入模型?在Django-nonrel中實現內聯以表示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中做到這一點?

回答

0

這並不容易做到開箱即用。您需要在Django的管理模塊中管理ListField和EmbeddedModelField類型字段,並執行一些黑客操作來完成它。你必須實現兩個部分:

Use EmbeddedModelField in Django's admin

您需要定義一個處理EmbeddedModelField對象,使其與Django的管理工作的一類。 Here是一個鏈接,你可以找到很棒的示例代碼。以下是演示只是代碼塊:

添加這個類到你的models.py文件,並使用EmbedOverrideField代替EmbeddedModelFieldCart模型:在forms.py

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

實現一個類有兩個方法:

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代替ListFieldCart模型:

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 
相關問題