1

内容がモデルに依存するファイルがあります。奇妙なこと: モデルのデータを更新するとき、そのファイルの変数に直接反映されません! 新しいデータを取得するために、開発サーバーを再起動する必要がありました。

解決策として、「リロード」を使用して、問題の変数を含むモジュールをリロードしました! データを表示できるようにする(更新ごとにリロードする)のは良い方法ではないと思います。

リロードせずにデータを直接更新して表示する方法はありますか?

ここに私のコードがあります: http://pastebin.com/97BPqh0Lリロードセクションにコメントがありました

# parametres/conf.py


from .models import ConfigApp

if ConfigApp.objects.exists():
     config = ConfigApp.objects.all()[0]
else:     config = None

EMPLOYE_BY_COMPAGNY = config.user_compagnie if config else 7

ANNONCES_LIFETIMES = config.annonce_days if config else None

IMAGE_SIZE = config.taille_image*1024 if config else 102400

#####################################################"

# compte/admin.py


from societe.models import Compagnie
from .forms import EmployeAdminForm,NewEmployeAdminForm
from django.contrib import admin
from django.contrib.auth.models import User,Group
import parametres.conf

class EmployeAdmin(admin.ModelAdmin):
     list_display = ['user','identite','email','societe','is_active']
     list_filter = ('is_active','societe')
     form = NewEmployeAdminForm
     search_fields = ("user__username",)
     user_obj = None

     def has_add_permission(self,request):
          reload( parametres.conf) #here reloading

          if request.user.is_superuser or request.user.groups.filter(name='admin').exists():
                    return True
          elif request.user.groups.filter(name='client').exists():
                    if Gestionnaire.objects.filter(employe__user=request.user,is_active=True).exists():
                         employe = request.user.employe_set.all()[0]
                         if Employe.objects.filter(societe=employe.societe).count() >= parametres.conf.EMPLOYE_BY_COMPAGNY:
                              return False
                         return True
          return False
4

1 に答える 1

1

これを解決する唯一の方法は、そもそもグローバル状態を使用しないことです。プロパティを使用して毎回適切な場所からデータを取得するクラスを作成し、必要に応じてオプションでキャッシュを実装します。

于 2012-08-10T19:32:09.617 に答える