从模型中的settings.py调用变量的问题

时间:2016-04-29 06:49:29

标签: python django django-models

我正在创建一个引用数据库中静态文件的应用程序。为了灵活起见,我回过头来根据BASE_DIR制作模型。

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'除了第一个参考之外的所有参考如果我去除设置.BASE_DIR在程序和shiptypes makemigrations运行没有问题。我觉得它可能是非常明显的东西,但我无法看到它。

谢谢! (如果你有一个更好的方法来解决这个问题,那我的所有耳朵都是

2 个答案:

答案 0 :(得分:0)

如果你在代码的开头添加BASE_DIR = settings.BASE_DIR之类的内容然后再使用它,那么它是否有用? 对不起,我不能自己测试一下......

答案 1 :(得分:0)

我想象一下,问题是您从django.conf而非您自己的设置模块导入,这可能意味着您的设置在您需要时尚未应用,只是从您自己的模块导入

from my_app import settings