【发布时间】:2016-06-29 10:28:38
【问题描述】:
给定一个未保存的/本地模型对象,我怎样才能找到已经拥有未保存对象信息的对象列表,而不必保持字段列表同步?
例如,假设我有这个模型:
class Person(models.Model):
name = models.CharField(max_length=100)
job = models.CharField(max_length=100, null=True)
hands_lost = models.IntegerField(null=True)
假设我过去已经创建了一些数据,如下所示:
Person.objects.create(name='Luke', job='Trainee')
Person.objects.create(name='Yoda', job='Master')
Person.objects.create(name='Yoda', job='Force Ghost')
然后从“迷失在宇宙中的手”数据库中,我收到一个事件,告诉我“将卢克的 HANDS_LOST 设置为 1”,我想做类似的事情:
luke = find_my_object(Person(name='Luke'))
if luke:
luke.hands_lost = 1
luke.save()
else:
luke = Person.objects.create(name='Luke', hands_lost=1)[0]
地点:
def find_my_object(person):
return **MAGIC HERE**.first()
预期结果可能是:
find_my_object(Person(name='Luke')) -> Luke
find_my_object(Person(name='Yoda')) -> 1st Yoda
find_my_object(Person(name='Yoda', job='Force Ghost')) -> 2nd Yoda
遇到“保持字段列表同步”问题的可能实现是:
def find_my_object(person):
query = {}
for field in ['name', 'job', 'hands_lost']:
value = getattr(person, field)
if value:
query[field] = value
return Person.objects.filter(**query).first()
跟进问题:
- 这是没有意义的练习,我是否应该尽可能长时间地将来自外部的数据作为字典保存?
- 如果
Person有一个我可能想要包含的相关字段怎么办?例如side = models.ForeignKey(SideOfTheForce, null=True)
【问题讨论】:
标签: python django django-models