2016-04-20 7 views
1

私はジャンゴ:Updateまたは以前に保存したモデルデータを変更し

ref_user = User.objects.get(
    username=form.cleaned_data['referrer'] 
    ) 

    user = User.objects.create_user(
    username=form.cleaned_data['username'] 
    ) 

    # Count the referrer's direct referrals 
    ref_recruits = DirectReferral.objects.filter(referrer=ref_user).count() 

    # Get newly created direct referral 
    get_ref = DirectReferral.objects.get(name=user) 

    #Check if ref_recruits is not divisible by 2 or paired 
    if ref_recruits % 2 != 0: 

     # Newly created direct referral is_paired is False 
     get_ref.is_paired = False 
     get_ref.save() 

    else: 

     # Newly created direct referral is_paired is True 
     get_ref.is_paired = True 
     get_ref.save() 

     # But I also want to update the previous is_paired to True 
     # of the same referrer 

私forms.pyにこのコードを持ってどのように私は、同じ参照元のTrueにis_paired以前を更新していますか?

私が意味することをよりよく理解するために、下の画像を確認してください。 enter image description here ご理解いただきますようお願い申し上げます。あなたが最後に追加された1がDirectReferralオブジェクトリストの最初の1である。すなわち、彼らはあなたがして、正しい順序で返されるので、何とか自分のDirectReferralオブジェクトを注文する必要が

models.py(要求)

class DirectReferral(models.Model): 
    name = models.OneToOneField(settings.AUTH_USER_MODEL, primary_key=True) 
    referrer = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="direct_referrals") 
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False) 
    is_paired = models.NullBooleanField(null=False) 
+0

DirectReferralモデルコードを表示してください。 – Paul

+0

@Paul models.pyを追加しました。 –

答えて

2

私はあなたのコードをリファクタリングすべきだと思います。あなたの実装によれば、私は `DirectReferral 'のnameフィールドが一意であると信じています。

ref_user = User.objects.get(
username=form.cleaned_data['referrer'] 
) 

user = User.objects.create_user(
username=form.cleaned_data['username'] 
) 

# Count the referrer's direct referrals 
ref_recruits = DirectReferral.objects.filter(referrer=ref_user).count() 

# Get newly created direct referral 
get_ref = DirectReferral.objects.get(name=user) 

#Check if ref_recruits is not divisible by 2 or paired 
if ref_recruits % 2 == 0: 
    get_ref.is_paired = True 
    DirectReferral.objects.filter(referrer=ref_user, is_paired=False).update(is_paired=True) 
else: 
    get_ref.is_paired = False 
get_ref.save() 
+0

はい、すべてのリフェラーには一意のDirectReferralが1つしかありません。 –

0

あなたの状況にあるリスト内の2番目のオブジェクトを簡単に変更することができます。例えば

get_refs = DirectReferral.objects.filter(referrer=ref_user).ordery_by('-timestamp') 

if ref_recruits % 2 != 0: 
    get_refs[0].is_paired = False 
    get_refs[0].save() 

else: 
    get_refs[0].is_paired = True 
    get_refs[1].is_paired = True 
    get_refs[0].save() 
    get_refs[1].save() 
+0

私はこれを試しましたが、なぜis_pairedが保存されていないか、または更新されていません。モデルデータには疑問符が返されます。 –

関連する問題