Python django admin-使用callable填充字段

Python django admin-使用callable填充字段,python,django,django-admin,Python,Django,Django Admin,除了这个例子之外,我找不到任何人这样做的例子,这对我除了知道代码需要放在哪里之外没有任何帮助 这是我的代码 class QuoteMaterial(models.Model): name = models.CharField(_('name'), max_length=255) content = models.TextField(_('content'), help_text=_('A static priced item

除了这个例子之外,我找不到任何人这样做的例子,这对我除了知道代码需要放在哪里之外没有任何帮助

这是我的代码

class QuoteMaterial(models.Model):
    name = models.CharField(_('name'), max_length=255)
    content = models.TextField(_('content'),
                           help_text=_('A static priced item used when doing a job. Selectable when creating a quote. '))
    price = models.DecimalField(_('price'), max_digits=6, help_text="not sure if this is before or after VAT yet", decimal_places=2, default="0.00")

    def get_companies():
        return CompanyProfile.objects.filter(user=request.user)

    company = models.ForeignKey(CompanyProfile, default=get_companies) 
如果不是很明显,我会在管理部分尝试用属于登录用户的可用公司填充一个下拉列表


我的问题是,我不知道如何将请求对象传递给“get_Companys”。任何人都知道任何例子。

你把术语弄混了

“预填充”是指从另一个字段填充一个字段。这不是如何为管理弹出窗口过滤内容,因为您实际上并没有设置字段,而是简单地限制选择并让用户从中设置字段

另外,字段的
default
值需要是一个常量,因为它被传递到数据库,而数据库不能使用查询来设置默认值


您真正想要的是
ForeignKey
limit\u choices\u to
()参数,但即使如此,您也不能为此使用
request
;它必须使用模型中的字段工作。原因是,如果基于用户,则某些用户将无法选择其他用户设置的当前值。当用户只想更改
内容时,您不希望
公司
改变自己,例如,仅仅因为
用户
在过滤器中没有生成当前的
公司

您混淆了术语

“预填充”是指从另一个字段填充一个字段。这不是如何为管理弹出窗口过滤内容,因为您实际上并没有设置字段,而是简单地限制选择并让用户从中设置字段

另外,字段的
default
值需要是一个常量,因为它被传递到数据库,而数据库不能使用查询来设置默认值


您真正想要的是
ForeignKey
limit\u choices\u to
()参数,但即使如此,您也不能为此使用
request
;它必须使用模型中的字段工作。原因是,如果基于用户,则某些用户将无法选择其他用户设置的当前值。当用户只想更改
内容时,您不希望
公司
更改自身,例如,仅仅因为
用户
没有在筛选器中生成当前的
公司

您必须在扩展
模型管理员的admin类中执行此重写,不在扩展
模型的类中。模型
。具体来说,您需要为\u foreignkey
覆盖
formfield\u

发件人:

就您的情况而言,它似乎是:

if db_field.name == "company":
    kwargs['queryset'] = request.user.company_set.all()

您必须在扩展
ModelAdmin
的admin类中执行此重写,而不是在扩展
models.Model
的类中执行此重写。具体来说,您需要为\u foreignkey
覆盖
formfield\u

发件人:

就您的情况而言,它似乎是:

if db_field.name == "company":
    kwargs['queryset'] = request.user.company_set.all()

我不确定字段上的默认值是否不适用于现有的模型字段。即使是这样,也需要返回字段对象,而不仅仅是查询集。这种方法的另一个问题是,正如您正确指出的,如何在模型中获取请求。为粗鲁的评论道歉,编辑超时,我在点击回车键后走开了,我没有意识到它超时了。我知道我现在不能做我想做的,我要为这个网站建立一个前端,我想这只是意味着用户将能够看到其他人的公司名称。我想这不是一个紧迫的问题。最后,请重新阅读上面的解决方案,谢谢。我不确定字段上的默认值是否不适用于现有的模型字段。即使是这样,也需要返回字段对象,而不仅仅是查询集。这种方法的另一个问题是,正如您正确指出的,如何在模型中获取请求。为粗鲁的评论道歉,编辑超时,我在点击回车键后走开了,我没有意识到它超时了。我知道我现在不能做我想做的,我要为这个网站建立一个前端,我想这只是意味着用户将能够看到其他人的公司名称。我想这不是一个迫在眉睫的问题。最后重新阅读上面的解决方案,你已经一针见血了,谢谢。