2010-07-02 75 views
3

我已經創建了一個自定義字段「Private FileField」。我無法使它與django-south一起工作。Django South:如何爲自定義字段創建規則?

我的南田規則的理解是基於 http://south.aeracode.org/docs/tutorial/part4.html#tutorial-part-4http://south.aeracode.org/docs/customfields.html

相關片段是:

class FileField(models.CharField): 
    __metaclass__ = models.SubfieldBase 

    def __init__(self, *args, **kwargs): 
     if not 'upload_to' in kwargs: 
      raise Exception("%s expects one keyword arg 'upload_to'" % (self.__class__)) 
     self.upload_to = kwargs['upload_to'] 
     del kwargs['upload_to'] 
     kwargs['max_length'] = 255 
     super(FileField, self).__init__(*args, **kwargs) 

rules = [ 
    (
    (FileField,), 
    [], 
    { 
     "upload_to": ["upload_to", {}], 
    }, 
) 
] 

from south.modelsinspector import add_introspection_rules 
add_introspection_rules(rules, ["^private_filefield\."]) 

運行manage.py schemamigration my_app_name - 自動失敗並顯示以下消息:

Exception: <class 'private_filefield.fields.FileField'> expects one keyword arg 'upload_to'

(此happes當站點包/南/ orm.py」 46行,在FakeORM稱)

的完整代碼上可以找到: http://bitbucket.org/vanschelven/django_private_filefield/src/tip/private_filefield/fields.py

== =編輯:添加下面的文本===

這是自動生成的遷移生成的「模型」部分的相關部分:

'mailfile.mailfile': { 
     'Meta': {'object_name': 'MailFile'}, 
     'creation_date': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}), 
     'expires_on': ('django.db.models.fields.DateField', [], {'default': 'datetime.date(2010, 7, 16)'}), 
     'file': ('private_filefield.fields.FileField', [], {'max_length': '255'}), 
     'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 
     'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), 
     'secret': ('django.db.models.fields.CharField', [], {'max_length': '40'}) 
    } 

請注意缺少'upload_to'作爲'file'的參數。

+0

我們可以使用FileField看到模型嗎?從錯誤消息看來,它似乎沒有upload_to參數。 – 2010-07-02 17:02:37

+0

模型的FileField具有upload_to參數。但是,自動生成的「模型」部分遷移沒有此參數。所以我想我的問題可以簡化爲「我如何確保自動生成的模型也包含此'upload_to'參數」? – 2010-07-06 10:29:56

回答

1

Bah,我試圖在評論中寫這個,但缺乏段落討厭我。

我只是在Django應用程序中設置您的自定義字段,並創建了一個虛擬模型來使用它。南完美地工作。我添加了另一個FileField,並且能夠運行schemamigration --auto而沒有問題。所以,我非常確定你已經正確地設置了南。

老實說,你檢查你的模型,以確保它具有upload_to參數?這會導致這個錯誤信息(並且這意味着South做了準確地說是你告訴它做的)。

+0

嗨盧克,我不再/不能再現這個問題,雖然它一直在困擾着我一段時間,但是一些思考也顯示它現在不再是一個問題。非常感謝您幫助我解決問題!哈哈! – 2011-05-20 09:23:06

+0

哈!畢竟我並不瘋狂......我只是在南方0.7中重新體驗過這一點;但問題在0.7.3中得到了修正。再次感謝盧克在這裏幫助我 – 2011-07-15 19:48:47

相關問題