rh0*_*ium 2 django django-models
我有一个类,我想要覆盖该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), False
except self.model.DoesNotExist:
raise e
def __unicode__(self):
return str(self.user)
Run Code Online (Sandbox Code Playgroud)
现在我完全承认我已经使用db/models/query.py作为我的起点.我的问题是这一行.
obj = self.model(**params)
我能够获得参数,但我还没有定义self.model.我不明白它需要什么,并且直觉上不应该明白应该是什么价值.即使回头看查询.我也无法解决这个问题.谁可以给我解释一下这个?我真的很想理解它并修复我的代码.
谢谢
get_or_create是一种Manager方法,即通过model.objects访问它 - 它是具有属性的管理器类model.因此,最简单的方法是创建一个自定义管理器并将您的方法放在那里.
但是,现在修复代码很容易.self.model只是类名 - 该行只是用给定的参数实例化类.所以你可以做到
obj = P4User(**params)
Run Code Online (Sandbox Code Playgroud)
虽然如果你继承了模型,这会中断.
| 归档时间: |
|
| 查看次数: |
3390 次 |
| 最近记录: |