我不知道如何构造代码以适应特定于
实例
一种特殊的模型。
例如。假设我有一个带有类型字段和
choices=(('I','Individual'),('C','Company))
. 根据我拥有的模型类型,我可能希望有自定义方法。
所以大声想想,这样的事情会很好:
class IndividualContact(Contact):
""" A custom class used for Contact instances with type='I' """
criteria = Q(type='I')
# The goal here is that Contact is now aware of IndividualContact and constructs
# objects accordingly.
Contact.register(IndividualContact)
甚至:
class SpecialContact(Contact):
""" A custom class used for the contact with pk=1 """
criteria = Q(pk=1)
在这一点上,我有一个很好的家为我的特殊实例特定的代码。
我探索的另一种方法是使用模型继承,避免像类型字段这样会传递新行为的东西。这样,新类优雅地插入到现有的框架中,并且很好地设置了在您需要的时候添加自定义字段到您的不同类型。
在我的例子中,我在网站上有一个资源信用系统,允许我说“你可能只有2个列表和20张照片”。单独的资源类型是定量的,但是有一个通用的credit表为您提供各种内容类型的credit。计算列表和照片的逻辑根据使用的对象类型而有所不同。
即。:
listing_credit = Credit.objects.create(content_type=ContentType.objects.get_for_model(Listing), user=user, credit_amt=2)
# Should subtract **active** listings from current sum total of Listing credits.
listing_credit.credits_remaining()
photo_credit = Credit.objects.create(content_type=ContentType.objects.get_for_model(Photo), user=user, credit_amt=5)
# Photos have no concept of an active status, so we just subtract all photos from the current sum total of Listing credits.
# Also, the Photo might be associated to it's user through a 'created_by' field whereas
# Listing has a user field.
photo_credit.credits_remaining()
我目前的方法是单独的类,但是我想减少这个样板文件,并且需要创建N个单独的表,其中只有一个
credit_ptr_id
.