【问题标题】:Django foreignkey not getting any userDjango外键没有得到任何用户
【发布时间】:2021-10-19 01:10:27
【问题描述】:

我正在构建一个 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}"
    

我的意见.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:\Users\HP\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\models\fields\related_descriptors.py, line 197, in __get__
Python Executable:  C:\Users\HP\AppData\Local\Programs\Python\Python39\python.exe
Python Version:     3.9.2

一个用户可以拥有多张票。但它没有占用任何用户。每当我试图去票务路线时,它都会叫我登录。我这样做了,但它会引发此错误。

【问题讨论】:

  • 你得到什么错误?
  • 错误:票没有客户。
  • 这次我被重定向到登录并且可以登录但是 git 错误'ticket has no customer'
  • 您有 Ticket 表格吗?如果不是,您的 Ticket 类应该是:class Ticket(forms.Form): - 而不是模型
  • 我做了 class Ticket(forms.Form): 但我得到了这个:TypeError: 'DeclarativeFieldsMetaclass' object is not iterable

标签: python django model


【解决方案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})


您可以在docs获取更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-26
    • 2018-10-21
    • 2014-09-02
    • 2021-11-17
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多