2016-07-19 37 views
0

我有2個不同的系統上運行的2個項目。(叫他們A和B)Django管理不列入反映dynmaic選擇在choiceField

在一個我有一個具有動態選擇領域的典範。

class ModelA(models.Model): 
     field1 = models.CharField(max_length=255, choices=get_field1_list()) 
     #..some more fields 

get_field1_list()函數I調用其上系統B運行的API,並返回其從ModelB來元組的列表(在選擇字段必需)(項目B)

[(a,A), (b,B), (c,C)...] 

現在,當我在管理面板中對這個模型(ModelB)進行更改時(可以說增加了一行),所以我期待它應該反映在modelA的選擇中。 我刷新了管理面板,但仍未顯示。但是當我重新啓動服務器A(本地服務器)時,我可以在ModelA(系統A)選項中看到新添加(在系統B中)的行。

所以我的問題是爲什麼會發生這種情況?我怎麼才能解決這個問題,因爲我可能不想每次都重新啓動uwsgi或nginx。

+0

'選擇'在這種情況下不是動態的。這是第一次調用返回的'get_field1_list'。用'ModelA.field1 = ForeignKey(ModelB)'設置'ModelA'和'ModelB'之間的關係不是更好嗎? –

+0

它們都是單獨的項目..我無法導入並直接使用foreignkey – Wendy

回答

1

在Django的1.9,我做這樣

from django.utils.functional import lazy 

class ModelA(models.Model): 

    field1 = models.CharField(max_length=255, blank=False, null=False) 
    # .. 

    def __init__(self, *args, **kwargs): 
     super(ModelA, self).__init__(*args, **kwargs) 
     self._meta.get_field('field1').choices = lazy(get_field1_list, list)() 

請注意,我用lazy。你可以忽略