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()

Поэтому присвоение полученных данных переменной перед тем, как передать их в метод создания объекта, кажется правильным решением... По крайней мере, у меня это работает.

Вернуться на верх