Django выдает неудобный результат
В общем, я работаю над проектом django, и всякий раз, когда я вставляю данные в базу данных, результат странно форматируется.
это моя модель
customer.py
class Customer(models.Model):
user = models.OneToOneField(User,null=True,blank=True,on_delete=models.CASCADE)
name = models.CharField(max_length=200, null=True)
email= models.CharField(max_length=200, null=True)
phone_number= models.CharField(max_length=200, null=True)
def __str__(self):
return self.name
Теперь, допустим, я сохранил нового клиента
new_customer = Customer.objects.create(name="Henry",email="henry@mail.com",phone_number="+330145786259")
new_customer.save()
Когда я пытаюсь получить имя клиента, я получаю следующее:
print(new_customer.name)
>('henry',)
У кого-нибудь есть какие-нибудь соображения для меня??????
Я попытался воссоздать модель в новом проекте, но все равно результат тот же
В вашем классе customer вы определили отношения 1:1 со встроенным классом модели пользователя django. И когда вы создаете объект customer, new_customer, вы не указали атрибут 'user'; следовательно, вашему объекту customer не хватает ключевого элемента.
В объекте user уже есть встроенное поле для хранения имен. Это 'first_name' и 'last_name'. Вам необходимо сначала создать модель пользователя, прежде чем вы сможете создать модель 'Customer'.
Ваш models.py должен выглядеть примерно так:
from django.contrib.auth.models import User
class Customer(models.Model):
user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
phone_number= models.CharField(max_length=200, null=True)
def __str__(self):
return self.user.first_name
# to return email -> self.user.email
Теперь нужно создать объект 'Customer' в view.py:
from django.contrib.auth.models import User
from .models import Customer
# create a user object
myuser = User.objects.create_user(username='john', email='jlennon@beatles.com', password='glass onion')
# pass the user object to the customer model
mycustomer = Customer.objects.create(user=myuser, phone_number=123456789)
# save the customer object
mycustomer.save()
Используйте django ModelForms для определения модели пользователя в соответствии с вашими требованиями, например, если вы не требуете, чтобы ваши пользователи имели связанные с ними пароли и т.д.
После долгих испытаний я понял, почему получаю странный результат. Я напрямую передавал данные из формы в метод создания объекта, например, так:
data = json.loads(request.body)
new_customer = Customer.objects.create(name=data['name'],email="henry@mail.com",phone_number="+330145786259")
new_customer.save()
Поэтому присвоение полученных данных переменной перед тем, как передать их в метод создания объекта, кажется правильным решением... По крайней мере, у меня это работает.