2016-04-29 11 views
0

我正在製作一個引用數據庫中的靜態文件的應用程序。爲了靈活性,我回到基於BASE_DIR的相關模型。從模型中的settings.py調用變量的問題

from django.db import models 
from django.conf import settings 

class agency(models.Model): 
    agency_name = models.CharField(max_length=200) 
    agency_flag = models.FilePathField(
     path=settings.BASE_DIR+"program/static/flags") 
    agency_bio = models.CharField(max_length=10000) 
    agency_color = models.CharField(max_length=20, default='red') 
    time = models.IntegerField(default=0) 

    def __str__(self): 
     return self.agency_name 

    class Meta: 
     verbose_name_plural = "Agencies" 

只要我只調用一次它的工作正常的變量。但也有2種模式,需要調用settings.BASE_DIR

class programs(models.Model): 
    code = models.CharField(max_length=3) 
    name = models.CharField(max_length=50) 
    description = models.CharField(max_length=500) 
    image = models.FilePathField(
     path=settings.BASE_DIR+"program/static/programs") 

    def __str__(self): 
     return self.code 

    class Meta: 
     verbose_name_plural = "Programs" 

class shiptypes(models.Model): 
    name = models.CharField(max_length=200) 
    desc = models.CharField(max_length=500) 
    color = models.CharField(max_length=6, default='000000') 
    image = models.FilePathField(
     path=settings.BASE_DIR+"program/static/shiptypes") 

    def __str__(self): 
     return self.name 

    class Meta: 
     verbose_name_plural = "Ship Types" 

儘管使用settings.BASE_DIR完全相同,Django會引發錯誤「類型的對象‘的設置’有沒有屬性‘BASE_DIR’上的所有,但第一參考。如果我去擺脫settings.BASE_DIR程序和shiptypes makemigrations運行沒有任何問題,我覺得它可能是非常明顯的東西,但我看不到它

謝謝!(也如果你有一個更好的方式來處理這個我都耳朵)

+1

你是如何導入設置的? – Sayse

+0

下面的答案瞬間起作用。我現在需要在視圖中的基本目錄以及它給了我同樣的錯誤..我使用的代碼是'從django.conf導入設置' 所以我不知道我在做什麼錯... – arlyon

回答

0

它是否工作,如果你把類似BASE_DIR = settings.BASE_DIR在代碼的開始,然後用它來代替?
對不起,我真的不能測試它自己...

+1

其中一種情況下,你如此糾結於你,無法退後一步,再看一眼。 hahaha多麼尷尬。 工作,謝謝。 – arlyon

0

我想像的問題是,你從django.conf,而不是你自己的設置模塊,這可能意味着你的設定匯入尚未申請時需要它,只需從你自己的模塊導入

from my_app import settings