小编rh0*_*ium的帖子

如何在单个Django模型中存储任意类型的值?

说我的问题数量未知.例如:

  • 天蓝色[y/n]
  • 你[约会]出生的日期是什么日期
  • 什么是pi [3.14]
  • 什么是大型整合[100]

现在,这些问题中的每一个都提出了一个不同但非常类型的答案(布尔值,日期,浮点数,整数).本土django可以在模型中愉快地处理这些问题.

class SkyModel(models.Model):
    question = models.CharField("Is the sky blue")
    answer = models.BooleanField(default=False)

class BirthModel(models.Model):
    question = models.CharField("What date were your born on")
    answer = models.DateTimeField(default=today)

class PiModel(models.Model)
    question = models.CharField("What is pi")
    answer = models.FloatField()
Run Code Online (Sandbox Code Playgroud)

但这有一个明显的问题,即每个问题都有一个特定的模型 - 所以如果我们以后需要添加一个问题,我必须更改数据库.呸.所以现在我想得到想象 - 如何通过答案类型转换自动地设置模型?

ANSWER_TYPES = (
    ('boolean', 'boolean'),
    ('date', 'date'),
    ('float', 'float'),
    ('int', 'int'),
    ('char', 'char'),
)

class Questions(models.model):
    question = models.CharField(()
    answer = models.CharField()
    answer_type = models.CharField(choices = ANSWER_TYPES)
    default = models.CharField()
Run Code Online (Sandbox Code Playgroud)

所以在理论上这将做到以下几点:

  • 当我构建我的观点时,我会看到答案的类型,并确保我只是放入了这个值.
  • 但是当我想将该答案拉回来时,它将以answer_type指定的格式返回数据.例3.14作为浮点而不是作为str返回.

我该如何进行这种自动转换?或者有人可以提出更好的方法吗? …

python django django-models

3
推荐指数
1
解决办法
224
查看次数

在formset.save()上的formset上设置外键

这很简单 - 如果问题得到解答,我想要做的就是设置谁回答问题.如果问题得到解答,有人可以告诉我如何设置表单值.我知道我也可以将其设置为初始值,但我必须有选择地确定哪些记录得到了回答.这看起来更简单,但是我把头发拉出来试图解决这个问题.有人可以帮我吗.

这个模型很简单

class ProjectQuestion(models.Model):
    question = models.CharField(max_length=255, editable=True)
    answer_type = models.CharField(max_length=50, choices=VALUE_TYPE_CHOICES, editable=True)
    answer = models.CharField(max_length=255, null=True, blank=True)
    answer_comment = models.TextField(blank = True, null = True)
    answered_by = models.ForeignKey(Employee, related_name="answered_by_test", null=True, blank=True)
    answer_date = models.DateTimeField(auto_now = True, null=True)
    objects = models.Manager()


    def __unicode__(self):
        return u'%s' % (self.question)
Run Code Online (Sandbox Code Playgroud)

代表视图也很简单.

# views.py
if request.method == "POST":
    print request.POST
    print request.user
    formset = QuestionFormSet(data=request.POST, files=request.FILES,
                              queryset=ProjectQuestion.objects.filter(id__lt=shortname))
    print formset.forms
    if formset.is_valid():
        person =  Employee.objects.get(name__iexact = request.user.get_full_name())
        for i in range(0, formset.total_form_count()):
            form …
Run Code Online (Sandbox Code Playgroud)

django django-models django-forms

3
推荐指数
1
解决办法
2519
查看次数

Django - 使用models.py覆盖get_or_create

我有一个类,我想要覆盖该get_or_create方法.基本上如果我的班级没有存储我想要的答案,那么就会做一些过程来得到答案而且没有提供.该方法实际上是一种get_or_retrieve方法.所以这是课程:

class P4User(models.Model):
  user      = models.CharField(max_length=100, primary_key=True)
  fullname  = models.CharField(max_length=256)
  email     = models.EmailField()
  access    = models.DateField(auto_now_add=True)
  update    = models.DateField(auto_now_add=True)

  @classmethod
  def get_or_retrieve(self, username, auto_now_add=False):
    try:
        return self.get(user=username), False
    except self.model.DoesNotExist:
        import P4
        import datetime
        from django.db import connection, transaction, IntegrityError
        p4 = P4.P4().connect()
        kwargs = p4.run(("user", "-o", username))[0]
        p4.disconnect()
        params = dict( [(k.lower(),v) for k, v in kwargs.items()])        
        obj = self.model(**params)
        sid = transaction.savepoint()
        obj.save(force_insert=True)
        transaction.savepoint_commit(sid)
        return obj, True
    except IntegrityError, e:
        transaction.savepoint_rollback(sid)
        try:
            return self.get(**kwargs), …
Run Code Online (Sandbox Code Playgroud)

django django-models

2
推荐指数
1
解决办法
3390
查看次数

从孩子外部调用父方法

我有一堆class对象都从基类继承。其中一些重写方法(save)并执行操作。对于这个特殊的用例,我想暂时不允许使用子save方法(如果存在),而是强制使用父save方法。

class BaseClass(object):
    def save(self, *args, **kwargs):
        print("Base Called")

class Foo(BaseClass):
    def save(self, *args, **kwargs):
        # do_stuff
        print("Foo called")
        return super(Foo, self).save(*args, **kwargs)

obj = Foo()
Run Code Online (Sandbox Code Playgroud)

如何obj从孩子的外部调用父级保存,以使其打印“ Base Called”?

python inheritance

2
推荐指数
1
解决办法
764
查看次数

Python单例 - 你如何在你的测试平台中摆脱(__del__)它们?

非常感谢您迄今为止给我的建议.使用测试平台是这个论坛真正向我展示的亮点,因为我很感激.我的问题是我正在玩一个单身人士,通常我不会对它进行分析,但在测试平台中我需要这样做.所以有人能告诉我如何去做这件事吗?我已经开始使用一个基本示例并将其构建到测试平台中,以便我可以看到最新情况.现在我不知道怎么摆脱它!

非常感谢!!

import sys
import logging
import unittest

LOGLEVEL = logging.DEBUG

class Singleton:
    """ A python singleton """

    class __impl:
        """ Implementation of the singleton interface """
        def __init__(self):
            self.log = logging.getLogger()
            self.log.debug("Init %s" % self.__class__.__name__)

        def id(self):
            """ Test method, return singleton id """
            return id(self)


    # storage for the instance reference
    __instance = None

    def __init__(self):
        """ Create singleton instance """
        # Check whether we already have an instance
        if Singleton.__instance is None:
            # Create and …
Run Code Online (Sandbox Code Playgroud)

python singleton unit-testing

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

回顾我的Django模型 - 需要很多建议

我正在提取各种信息来源以建立一个人的个人资料.一旦我这样做,我希望能够灵活地以不同的方式看待一个人.我在django中没有太多的空洞,所以我想对我的模型进行批评(温柔).不可否认,即使我编码这个,我也在考虑裁员(反对DRY),但我想知道其他人的想法.FWIW - 这个数据没有被创建 - 所以也许我不应该保留所有数据,但丢弃数据似乎很糟糕..

具体来说,我想知道ManyToMany的使用是否合适,或者您只是KISS并将每个条目保留为自己没有任何ManyToMany业务.从长远来看,我认为KISS会使更新变得简单(基本的循环),但是能否查询一个人(比如基于location_description或job_function)会有一个权衡.无论如何,我会很感激一些输入.

class Person(models.Model):

    """This simply builds a notes user"""

    aliases = models.ManyToManyField(Aliases)  #Hmm this is list..
    assistant = models.CharField(max_length = 255, blank = True)
    cell_phone = models.CharField(max_lenth = 16, blank = True)
    city = models.ManyToManyField(City)
    country = models.ManyToManyField(County)
    department = models.ManyToManyField(Department)
    departmeht_number = models.ManyToManyField(Department_Number)
    division_code = models.ManyToManyField(Division_Code)
    email = models.EmailField(max_length = 50)
    functional_area = models.ManyToManyField(Functional_Area)
    # jpeg = models.
    job_classification = models.ManyToManyField(Job_Classification)
    job_classification_code = models.ManyToManyField(Job_Classification_Code)
    last_name = models.CharField(max_length = 255)
    location_description = models.ManyToManyField(Location_Description)
    location_path = …
Run Code Online (Sandbox Code Playgroud)

python django coding-style django-models

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

如何从Haystack SearchQuerySet中删除项目

在Django中,你可以通过这样的记录删除一个QuerySet项目在这里

queryset = QuerySet.remove(item)
Run Code Online (Sandbox Code Playgroud)

Haystack SearchQuerySet建立在QuerySet上,但似乎未实现remove方法。有谁知道一种删除SearchQuerySet中项目的方法?

FWIW我正在尝试对客户端进行第二级过滤。基本上,我正在遍历SearchQuerySet的几个特定属性。这个想法是,如果他们没有,我想删除它们。

谢谢

django django-queryset django-haystack

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