如何解决Django ORM如何彼此区分,识别或识别对象
正如标题所述,我想将对象彼此区分开。
例如,我有Application
个对象和AdmissionBase
个对象。 Application
是学生申请大学的申请,而AdmissionBase
是要申请的财务基础-付费,补助,财务支持等。
如何在不通过其name
属性(项目必须支持i18n)属性进行查询的情况下,将赠款基础与有偿和财务支持相反,反之亦然?它们的name
值可能会在以后更改。
我当前的解决方案是我在每个引用对象中使用code
属性。准入基础有书面的人类可读常量,例如PAID
,GRANT
或F_SUP
。这可能是一个很好的解决方案,但是该项目适用于多所大学。这意味着在每台大学拥有的服务器上输入将code
属性更新为多个对象(其他类使用相同的code
属性,它来自抽象基类)加上这些对象来自其他API(政府API)不包含code
属性。
下面是代码,您可以理解
class AbstractReference(models.Model):
uid = models.UUIDField(primary_key=True,editable=False,default=uuid4)
name = models.CharField(max_length=128)
# in this attribute human-readable constants are written
code = models.CharField(max_length=128)
class Meta:
abstract = True
# this is used just a reference in dropdowns on front-end
class AdmissionBase(AbstractReference):
# This attributes are fore easy querying,# e.g. AdmissionBase.object.get(code=AdmissionBase.GRANT) -> <AdmissionBase: Grant | GRANT>
GRANT = 'GRANT'
PAID = 'PAID'
F_SUP = 'F_SUP'
def __str__(self):
return f"{self.name} | {self.code}"
class Application(AbstractBaseModel):
user = models.ForeignKey(User,on_delete=models.CASCADE)
admission_base = models.ForeignKey(AdmissionBase,on_delete=models.PROTECT)
...
和AdmissionBase
类的对象
In [2]: AdmissionBase.objects.all()
Out[2]: <MultilingualQuerySet [<AdmissionBase: Grant | GRANT>,<AdmissionBase: Paid | PAID>,<AdmissionBase: Financial support | F_SUP>]>
如果您在AbstractReference
主键中看到了什么,这就是为什么选择code
方法的原因,但这有点麻烦。如何区分或识别给定的接纳基础对象是授予期权还是有偿期权?还是在给定外部数据资源条件下将它们彼此区分开的更好方法?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。