Как можно после вызова метода присвоить вручную значение полю объекта.
Код, для понимания:
from django.db import models class Password(models.Model): password = models.CharField(max_length=100) login = models.OneToOneField('Login') class Meta: db_table = 'passwords' class Login(models.Model): login = models.CharField(max_length=100, unique=True) class Meta: db_table = 'logins' gender = ( ('m', 'man'), ('w', 'woman'), ) class CustomUser(models.Model): login = models.OneToOneField(Login) password = models.OneToOneField(Password) email = models.EmailField(max_length=100) gender = models.CharField(max_length=5, choices=gender) class Meta: db_table = 'custom_user' class Achievement(models.Model): name = models.CharField(max_length=100) cost = models.FloatField(blank=True) login = models.ForeignKey(Login) class Meta: db_table = 'achievement'
Выполнение метода:
>>> from app_convertation.models import * >>> res = CustomUser.objects.raw("""SELECT logins.id as id, '' as email, '' as gender, achievement.name as name FROM logins JOIN passwords ON passwords.login_id = logins.id JOIN achievement ON logins.id = achievement.login_id""") >>> res[0] <CustomUser_Deferred_login_id_password_id: CustomUser_Deferred_login_id_password_id object> >>> res[0].login # как теперь вручную присвоить этому атрибуту значение? Traceback (most recent call last): File "<input>", line 1, in <module> File "C:\Python33\lib\site-packages\django\db\models\fields\related.py", line 303, in __get__ val = self.field.get_local_related_value(instance) File "C:\Python33\lib\site-packages\django\db\models\fields\related.py", line 995, in get_local_related_value return self.get_instance_value_for_fields(instance, self.local_related_fields) File "C:\Python33\lib\site-packages\django\db\models\fields\related.py", line 1010, in get_instance_value_for_fields ret.append(getattr(instance, field.attname)) File "C:\Python33\lib\site-packages\django\db\models\query_utils.py", line 114, in __get__ instance._state.db).get(pk=instance.pk), File "C:\Python33\lib\site-packages\django\db\models\query.py", line 307, in get self.model._meta.object_name) app_convertation.models.DoesNotExist: CustomUser matching query does not exist. >>> res[0].login = Login.objects.get(pk=1) >>> res[0].login Traceback (most recent call last): File "<input>", line 1, in <module> File "C:\Python33\lib\site-packages\django\db\models\fields\related.py", line 303, in __get__ val = self.field.get_local_related_value(instance) File "C:\Python33\lib\site-packages\django\db\models\fields\related.py", line 995, in get_local_related_value return self.get_instance_value_for_fields(instance, self.local_related_fields) File "C:\Python33\lib\site-packages\django\db\models\fields\related.py", line 1010, in get_instance_value_for_fields ret.append(getattr(instance, field.attname)) File "C:\Python33\lib\site-packages\django\db\models\query_utils.py", line 114, in __get__ instance._state.db).get(pk=instance.pk), File "C:\Python33\lib\site-packages\django\db\models\query.py", line 307, in get self.model._meta.object_name) app_convertation.models.DoesNotExist: CustomUser matching query does not exist.