2016-04-19 7 views
0

У меня есть что-то вроде этого в views.py.Django: Получить данные поля модели из данных поля модели

if form.is_valid(): 

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

     if User.objects.filter(username=ref_user).exists(): 

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

      direct = DirectReferral.objects.create(
       name = user, 
       referrer = ref_user # New created referrer 
      ) 

      if DirectReferral.objects.filter(referrer=ref_user).exists(): 

       # Get the referrer of the newly created referrer in DirectReferral database 

       indirect = IndirectReferral.objects.create(
        name = user, 
        referrer = # This should be the referrer of the newly created referrer 
       ) 

Как сделать запрос или получить реферер вновь созданного реферера?

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

Надеюсь, вы поймете мой вопрос.

+0

Точно так же вы делаете это примерно на 5 строк выше вашего комментария в своем представлении? – Sayse

ответ

1

Я предполагаю, что в коде есть некоторая ошибка.

если form.is_valid():

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

    if User.objects.filter(username=ref_user).exists(): 

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

     direct = DirectReferral.objects.create(
      name = user, 
      referrer = ref_user # New created referrer 
     ) 

     if DirectReferral.objects.filter(referrer=ref_user).exists(): 

      # Here you are checking for something you just created. 
      # I guess this should be 
      # DirectReferral.objects.filter(name=ref_user).exists() 

      # Get the referrer of the newly created referrer in DirectReferral database 

      indirect = IndirectReferral.objects.create(
       name = user, 
       referrer = # This should be the referrer of the newly created referrer 
      ) 

Если вы собираетесь найти реферера пользователя направления созданного в данный момент пользователь, вы могли бы сделать что-то вроде этого.

если form.is_valid():

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

    if User.objects.filter(username=ref_user).exists(): 

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

     direct = DirectReferral.objects.create(
      name = user, 
      referrer = ref_user # New created referrer 
     ) 

     try: 
      referral_of_ref_user = DirectReferral.objects.get(name=ref_user).referrer 
     except DirectReferral.DoesNotExist: 
      # Do what needs to be done if direct referral not exist. 
      print "No referrer" 
      # Get the referrer of the newly created referrer in DirectReferral database 
     else: 
      indirect = IndirectReferral.objects.create(
       name = user, 
       referrer = referral_of_ref_user 
      ) 

EDIT:

минимальными правок к коду:

если form.is_valid():

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

    if User.objects.filter(username=ref_user).exists(): 

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

     direct = DirectReferral.objects.create(
      name = user, 
      referrer = ref_user # New created referrer 
     ) 

     if DirectReferral.objects.filter(name=ref_user).exists(): 

      # Get the referrer of the newly created referrer in DirectReferral database 

      indirect = IndirectReferral.objects.create(
       name = user, 
       referrer = DirectReferral.objects.filter(name=ref_user)[0].referrer 
      ) 
+0

Спасибо! Это сработало. Не знал, что я мог бы сделать что-то вроде 'DirectReferral.objects.get (name = ref_user) .referrer'. У вас есть документация для такого рода запросов? –

+0

Этот код является обычным запросом. Существует возможность другого исключения, если имя не уникально для 'DirectReferral'. Вам также придется поймать исключение DirectReferral.MultipleObjectsReturned. –