小编PT1*_*114的帖子

Django外键:得到相关模型?

是否可以通过外键字段本身获取外键的相关模型?

例如,如果我有3个型号:

class ModelA(models.Model)
    field1 = models.CharField(max_length=10)

class ModelB(models.Model)
    field1 = models.CharField(max_length=10)

class ModelC(models.Model)
    field1 = models.CharField(max_length=10)
    field2 = models.ForeignKey(ModelA)
    field3 = models.ForeignKey(ModelB)
Run Code Online (Sandbox Code Playgroud)

我想这样做:

for field in ModelC._meta.fields:
    if field.get_internal_type() == "ForeignKey":
        #get the related model for field e.g. ModelA or ModelB
Run Code Online (Sandbox Code Playgroud)

这可能只使用模型本身而不是模型的实例吗?

python django foreign-keys django-models

15
推荐指数
1
解决办法
1万
查看次数

在模板中设置要在中间件中访问的变量

我似乎很难在我的一个中间件类中设置一个变量,然后我可以在模板层中访问它.

基本布局是这样的:

class TheMiddleware(object):
    def __init__(self, etc):
        stuff...

    def process_response(self, request, response):
        request.my_var = "whatever"
        return response
Run Code Online (Sandbox Code Playgroud)

然后在我有的不同视图的模板上:

{% custom_tag arg_a %}
Run Code Online (Sandbox Code Playgroud)

哪个是应该从请求返回变量的模板标记:

@register.simple_tag
def custom_tag(arg_a):
    return threading.currentThread().request.my_var
Run Code Online (Sandbox Code Playgroud)

这与"渲染时捕获的AttributeError"错误一致:'WSGIRequest'对象没有属性'my_var'"

我认为这可能是我在模板标签中访问请求的方式.所以我将django.core.context_processors.request添加到我的TEMPLATE_CONTEXT_PROCESSORS中,如同在这个问题中,并尝试将请求对象传递给标记,然后直接从模板访问请求,但没有运气.

我想我对请求对象的工作方式缺乏了解.是否可以将一个变量分配给一个请求对象并在几个视图中选择该变量?我认为请求对象是通过视图传递的,但似乎生成了一个新实例.

如果是这种情况,您将如何在中间件中存储全局变量,然后您可以从应用程序中的任何位置访问它,无论是在视图还是模板中?

更新:

为了消除混淆(无论是我的还是其他人,我不确定!)我不是试图在视图的process_response中间件中设置请求变量,然后在同一视图的模板选择它.我理解这不起作用,因为在保存变量之前已经处理了模板.(这是我的故意行为).

我有两个视图,view1view2视图,其中一个有一个装饰器,使中间件在请求中设置变量.它是view2模板,它在设置变量之后,我希望访问变量.

django

7
推荐指数
1
解决办法
7042
查看次数

Django Models:覆盖字段返回值

我想知道是否可以在返回字段时覆盖字段的默认值.说我有一个模型:

class ModelA(models.Model)
    name = models.CharField(max_length=30)
Run Code Online (Sandbox Code Playgroud)

有没有办法打电话

modela_instance.name 
Run Code Online (Sandbox Code Playgroud)

可以返回一个修改后的值,例如name +"foo",但是在模型本身中有默认运行foo的代码,所以我需要做的就是调用name来获取附加值?

我应该详细说明我实际上希望做的是在模型中有一个方法:

def get_name(self):
     return self.name + " foo"
Run Code Online (Sandbox Code Playgroud)

或类似的,只是希望get_name方法覆盖对"name"字段的调用.

django overriding field model

6
推荐指数
1
解决办法
7037
查看次数

字典上的三元操作

有没有办法在dict上执行三元运算,其中测试是has_key()而没有遇到键错误?即

variable = dict["the_key"] if dict.has_key("the_key") else "something"
Run Code Online (Sandbox Code Playgroud)

(这明显击中了关键错误)

如果没有这个,那么根据一个可能有也可能没有问题的字典来分配一堆变量值的最pythonic方法是什么?重复:

if dict.has_key('key'):
    value = dict['key']
else:
    value = "value"
Run Code Online (Sandbox Code Playgroud)

广告似乎非常不优雅.

python dictionary conditional-operator

6
推荐指数
2
解决办法
3902
查看次数