Django foreignkey не получает ни одного пользователя

#python #django #model

Вопрос:

Я создаю приложение Django. Я настроил пользовательскую модель. Мой models.py:

 from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from phonenumber_field.modelfields import PhoneNumberField
from phonenumber_field.phonenumber import PhoneNumber

# Create your models here.

class UserManager(BaseUserManager):
    def create_user(self, phone_number,username,email=None, password=None):
        if not phone_number:
            raise ValueError("You must specify your phone number")
        if not username:
            raise ValueError("You must specify your username")
        
        try:
            user = self.model(phone_number= PhoneNumber.from_string(phone_number=phone_number,region="BD").as_national,
                                                                    username=username,
                                                                    email=self.normalize_email(email))
        except :
            user = self.model(phone_number= PhoneNumber.from_string(phone_number=phone_number,region="BD").as_national,
                                                                    username=username)
        user.save(using=self._db)
        return user

    def create_stuffuser(self, phone_number,username,email,password):
        user = self.create_user(phone_number,username,email=email,password=password)
        user.staff = True
        user.save(using=self._db)
        return user

    def create_superuser(self, phone_number,username,email,password):
        user = self.create_user(phone_number,username,email=email,password=password)
        user.staff = True
        user.admin= True
        user.save(using=self._db)
        return user


class User(AbstractBaseUser):
    phone_number = PhoneNumberField(unique=True)
    username = models.CharField(unique=False,max_length=50)

    REQUIRED_FIELDS = ['username']

    email = models.EmailField(unique=False)

    is_active = models.BooleanField(default=True)
    staff = models.BooleanField(default=False)
    admin = models.BooleanField(default=False)

    USERNAME_FIELD = 'phone_number'

    def get_full_name(self):
        return self.username
    
    def get_short_name(self):
        return self.username
    
    def get_email(self):
        return self.email
    
    def __str__(self):
        return str(self.phone_number)
    
    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self,app_label):
        return True

    @property
    def is_staff(self):
        return self.staff

    @property
    def is_admin(self):
        return self.admin

    objects = UserManager()

 

Я вошел в систему, но это ошибка.
Моя модель билета:

 User = settings.AUTH_USER_MODEL
class Ticket(models.Model):
    from_station = models.CharField(max_length=30)
    to_station = models.CharField(max_length=30)
    purchased_on = models.DateTimeField(default=timezone.now)
    travel_on = models.DateTimeField()
    customer = models.ForeignKey(User,on_delete=models.CASCADE)

    def __str__(self):
        return f"Customer:{self.customer.username},From:{self.from_station},To:{self.to_station},Travel on:{self.travel_on},Purchased on:{self.purchased_on}"
    
 

Мой views.py:

 @csrf_protect
@login_required
def buyticket(response):
    if response.method == 'POST':
        form = Ticket(response.POST)
        if form.is_valid():
            form.save()
            return redirect('main-home-page')
    else:
        form = Ticket()

    return render(response,'main/ticket.html',{'form':form})
 

Ошибка, которую я получил:

 Ticket has no customer.

Request Method:     GET
Request URL:    http://127.0.0.1:8000/ticket/
Django Version:     3.2.4
Exception Type:     RelatedObjectDoesNotExist
Exception Value:    

Ticket has no customer.

Exception Location:     C:UsersHPAppDataLocalProgramsPythonPython39libsite-packagesdjangodbmodelsfieldsrelated_descriptors.py, line 197, in __get__
Python Executable:  C:UsersHPAppDataLocalProgramsPythonPython39python.exe
Python Version:     3.9.2
 

У пользователя может быть несколько билетов. Но он не принимает ни одного пользователя. Всякий раз, когда я пытаюсь перейти на маршрут билета, он вызывает меня для входа в систему. Я так и делаю, но потом он выдает эту ошибку.

Комментарии:

1. В чем заключается ошибка, которую вы получаете?

2. ошибка:У билета нет клиента.

3. на этот раз я был перенаправлен на вход и смог войти, но ошибка git «у билета нет клиента»

4. У вас есть бланк для билета? Если нет, ваш класс билета должен быть: билет класса(формы.Форма): — а не модели

5. Я сделал билет класса(формы.Форма): но я получил следующее:Ошибка типа: объект ‘DeclarativeFieldsMetaclass’ не может быть повторен

Ответ №1:

Эта ошибка отображается вам, потому что вы объявляете значение from равным модели в :

  else:
        form = Ticket()
 

Вам следует создать другой файл под названием forms.py в приложении
и сделайте что-нибудь подобное

 from .models import Ticket
from django.forms import ModelForm

class TicketForm(ModelForm):
     class Meta:
          model = Ticket
          fields = '__all__

 

и во взглядах

 from .forms import TicketForm

def buyticket(response):
    form = TicketForm()
    if response.method == 'POST':
        if form.is_valid():
            form.save()
            return redirect('main-home-page')
    else:
        form = TicketForm()

    return render(response,'main/ticket.html',{'form':form})


 

Вы можете получить более подробную информацию в документах