2016-04-20 3 views
1

У меня есть этот код в моем forms.pyDjango: обновить или изменить предыдущие сохраненные данные модели

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 

Как обновить предыдущий is_paired Истина того же реферер?

Проверьте изображение ниже, чтобы лучше понять, что я имею в виду. enter image description here Надеюсь, вы понимаете.

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

Я думаю, вы должны реорганизовать свой код. В соответствии с вашей реализацией, я считаю, что поле name для `DirectReferral 'будет уникальным.

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. –

0

Вам нужно заказать DirectReferral объекты каким-то образом, чтобы они вернулись в правильном порядке, то есть последняя добавленная одна является первым в один список с DirectReferral объектов, то может легко изменить второй объект в списке, который находится в вашей ситуации предыдущий.

Например:

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 не сохраняется или не обновляется. Он возвращает знак вопроса в мои данные модели. –