【问题标题】:How to create a QueryField editable from Admin in Django?如何在 Django 中创建可从 Admin 编辑的 QueryField?
【发布时间】:2023-03-05 00:25:01
【问题描述】:

对使用 Django 有一些想法:我想使用管理员为我的网站创建内容。但是当我谈论内容时,我指的是:

  • 导航栏类别
  • 链接(附加到类别)
  • 文章

到目前为止,我已经能够做到这一切。没什么难的,一些模型、条件和方法,你就可以开始工作了。

困扰我的是我想在我的文章模型中创建一个 QueryField。最后一个用于可自定义的内容列表。

一个简单的例子是一个显示到目前为止已发表的所有文章列表的模式。所以我创建了一个链接,我的模态出现了。但是我如何从我的管理员那里得知我希望它列出自定义查询集中的所有对象,即它自己,也是在管理员中创建的。

简短:如何创建 models.QueryField() ?

文章模型很简单..:

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    published = models.BooleanField(default=False)
    date = models.DateField()
    lined = models.BooleanField(default=False)


    def __str__(self):
        return self.title

    def __repr__(self):
        return self.title

【问题讨论】:

  • 你能展示你的文章模型,一个样本吗?另外,如果您通过管理员注册文章,通过管理员/数据库添加的数据将反映在管理员中
  • 给你,很难,我不明白这对我的问题有什么帮助,我正在寻找一些非常通用的东西。文章模型应该只包含可自定义的字段。
  • The article model is just supposed to contain the customization field. 那你为什么不添加一个你想定制的foriegnkey字段(另一个存储自定义字段数据的模型)?
  • 我希望它是通用的,它不仅仅是对象上的 FK。它更像是对数据库中您想要的任何内容的查询。
  • 好的,但是,But how can I tell from my admin that I want it to list all objects from a customized queryset that is, it self, created in the admin as well. 有点不清楚,需要一些可靠的例子。 :)

标签: django


【解决方案1】:

利用Custom Model Fields的有效思想:

from django.db import models
import os

class QueryExecutor(object):
    
    def __init__(self, value):
        self.qValue = value
        
    def __str__(self):
        return self.qValue
        
    def __repr__(self):
        return self.qValue

class QueryField(models.Field):
    description = "This is a custom field for storing query"
    
    __metaclass__ = models.SubfieldBase
    
    def db_type(self, connection):
        return 'CharField'
            
    def to_python(self, value):
        if isinstance(value, QueryExecutor):
            return value
        return QueryExecutor(value)
        
    #def get_db_prep_save(self, value, connection):
    #   return "" + value + ""

class PageDetail(models.Model):
    PAGE_TITLE = (
                  ('HOME','HOME'),
                  ('CONT','CONTACT US'),
                  ('ABOU','ABOUT US'),
    )
    Name = models.CharField(max_length=4, choices=PAGE_TITLE, default='HOME')
    CustomQuery = QueryField()
    Details = models.TextField()
    
    def __unicode__(self):
        return self.Name

您可以在此处找到 Django 中已有的类似自定义字段:

  1. Geometry Field
  2. Small Field

注意

这是我可以在模型中得到的,它创建了一个自定义字段。它在管理员中添加了一个字段,我可以在其中看到字段查询选择。

它没有完全工作,因为我没有时间完成它。如果对您没有帮助,我会删除答案。

也就是说,我有一种感觉,如果您将 QueryField 提及为 Article.objects.all(),您的管理员无法在 UI 中扮演对象列表的角色

【讨论】:

  • 好主意,我想我应该为这个应用程序连接一个完整的应用程序以便于开发,使用管理员会更繁琐,而不是编写几个表单并在视图中添加功能。虽然我没有想到一个简单的方法会满足需求。谢谢\o/
  • @cp151 好的,我希望它至少提供了一些我发现的信息。不客气
猜你喜欢
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 2012-11-07
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
相关资源
最近更新 更多