1

ユーザープロファイルモデルがあります。プロファイルがどの程度完成しているかについてスコアを付けてくれる新しいモデル メソッドが必要です。例えば:

Name 10%
Mobile 50%
Gender 10%
Website 10%
Location 10%
birth_date 10%

つまり、ユーザーが名前携帯電話を入力した場合、プロファイルは60%完了します。

誰かが私がそのようなことを達成する方法を教えてくれませんか? ありがとう:

私のモデル:

class Profile(UserenaLanguageBaseProfile):
    """ Default profile """
    GENDER_CHOICES = (
        (1, _('Male')),
        (2, _('Female')),
    )

    user = models.OneToOneField(User,
                                unique=True,
                                verbose_name=_('user'),
                                related_name='profile')

    gender = models.PositiveSmallIntegerField(_('gender'),
                                              choices=GENDER_CHOICES,
                                              blank=True,
                                              null=True)
    mobile = models.CharField(max_length=32, blank=True)
    website = models.URLField(_('website'), blank=True, )
    location = models.CharField(_('location'), max_length=255, blank=True)
    birth_date = models.DateField(_('birth date'), blank=True, null=True)
4

2 に答える 2

7

1つのアプローチは次のとおりです。

class Profile(UserenaLanguageBaseProfile):
    #attributes

    @property 
    def percentage_complete(self):
        percent = { 'name': 10, 'mobile': 50, 'website': 10, 'location': 10, 'birth_date': 10, 'gender': 10}
        total = 0
        if self.gender:
            total += percent.get('gender', 0)
        if self.name:
            total += percent.get('name', 0)
        #and so on
        return "%s"%(total)

そして、profile.percentage_completeあなたに完全性を与えます。ディクショナリを管理しているため、重みを完全に制御でき、値はパーセンテージであることが保証されます。

于 2013-06-24T15:21:32.610 に答える
0

ここで、いくつかのモデルでモデルの完全性を計算する必要がある 1 つのプロジェクトに取り組んでいるのは、django シグナルを使用して問題にどのようにアプローチしたかです。django settings.py でモデルを定義することで、この例をさらに進めることができます。モデル関係の処理と同様に。

class UserProfile(UserenaLanguageBaseProfile):
    complete_progress = { 'name': 10, 'mobile': 50, 'website': 10, 'location': 10, 'birth_date': 10, 'gender': 10}


# If this is too heavy best put this in a background task celery
@receiver(post_save)
def model_completeness_listener(sender, instance=None, created=False, **kwargs):
    list_of_models = [UserProfile, CustomerProfile]
    if sender in list_of_models:
        complete_progress = 0.0
        total_weight = 0.0
        for field in instance.completeness:
        try:
            total_weight += instance.completeness[field]
                if getattr(instance, field):
                    complete_progress += instance.completeness[field]
        except AttributeError:
            continue

        overall_completeness = (complete_progress/total_weight) * 100
        print "------------%s---------------" % (sender.__name__)
        print "[progress weight : %d total weight : %d overall completeness : %d]" % (complete_progress, total_weight, overall_completeness)
        print "-----------------------------"

プロファイル モデルに割り当てるか、別の場所に保存するか、overall_completeness パーセント値で何かを行います

于 2015-10-16T13:51:20.817 に答える