说我的问题数量未知.例如:
现在,这些问题中的每一个都提出了一个不同但非常类型的答案(布尔值,日期,浮点数,整数).本土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)
所以在理论上这将做到以下几点:
我该如何进行这种自动转换?或者有人可以提出更好的方法吗? …
这很简单 - 如果问题得到解答,我想要做的就是设置谁回答问题.如果问题得到解答,有人可以告诉我如何设置表单值.我知道我也可以将其设置为初始值,但我必须有选择地确定哪些记录得到了回答.这看起来更简单,但是我把头发拉出来试图解决这个问题.有人可以帮我吗.
这个模型很简单
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) 我有一个类,我想要覆盖该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) 我有一堆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”?
非常感谢您迄今为止给我的建议.使用测试平台是这个论坛真正向我展示的亮点,因为我很感激.我的问题是我正在玩一个单身人士,通常我不会对它进行分析,但在测试平台中我需要这样做.所以有人能告诉我如何去做这件事吗?我已经开始使用一个基本示例并将其构建到测试平台中,以便我可以看到最新情况.现在我不知道怎么摆脱它!
非常感谢!!
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) 我正在提取各种信息来源以建立一个人的个人资料.一旦我这样做,我希望能够灵活地以不同的方式看待一个人.我在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) 在Django中,你可以通过这样的记录删除一个QuerySet项目在这里:
queryset = QuerySet.remove(item)
Run Code Online (Sandbox Code Playgroud)
Haystack SearchQuerySet建立在QuerySet上,但似乎未实现remove方法。有谁知道一种删除SearchQuerySet中项目的方法?
FWIW我正在尝试对客户端进行第二级过滤。基本上,我正在遍历SearchQuerySet的几个特定属性。这个想法是,如果他们没有,我想删除它们。
谢谢
django ×5
python ×4
coding-style ×1
django-forms ×1
inheritance ×1
singleton ×1
unit-testing ×1