如何在Django中从Admin创建一个可编辑的QueryField?

时间:2014-10-26 07:41:28

标签: django

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

  • 导航栏类别
  • 链接(附加到类别)
  • 制品

到目前为止,我已经能够做到这一切。没有什么比这更难的,一些模型,条件和方法,你正在努力工作。

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

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

简短:如何创建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

1 个答案:

答案 0 :(得分: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
  3. 注意

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

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

    也就是说,我有一种感觉,如果您将QueryField称为Article.objects.all()

    ,则您的管理员无法在UI中显示对象的角色列表