ERROR: TypeError at /admin/myapp/booking/19/change/

Я создал модель, используя абстрактный класс модели пользователя, для онлайн бронирования авиабилетов. Я новичок в этом деле, поэтому не добавил в нее много функциональных возможностей. Я делюсь своими model.py, admin.py, serializer.py, views.py.

Мой вопрос:

  1. В ссылке ниже показан скриншот ошибки, возникающей, когда я хочу ПОЛУЧИТЬ ПУТЬ УДАЛИТЬ данные бронирования, используя панель ADMIN. Мне пока не удается разобраться в проблеме.

Ошибка при попытке GET PUT DELETE booking

Соответствующий сериализатор

#serializers.py


from rest_framework import serializers
from myapp.models import Airport, Flight, User, Passenger, Booking 


class UserRegistrationSerializer(serializers.ModelSerializer):
  # We are writing this becoz we need confirm password field in our Registratin Request
  password2 = serializers.CharField(style={'input_type':'password'}, write_only=True)
  class Meta:
    model = User
    fields=['email','name','contact_number','gender','address','state','city','country','pincode','dob','password', 'password2']
    extra_kwargs={
      'password':{'write_only':True}
    }

  # Validating Password and Confirm Password while Registration
  def validate(self, attrs):
    password = attrs.get('password')
    password2 = attrs.get('password2')
    if password != password2:
      raise serializers.ValidationError("Password and Confirm Password doesn't match")
    return attrs

  def create(self, validate_data):
    return User.objects.create_user(**validate_data)

class UserLoginSerializer(serializers.ModelSerializer):
  email = serializers.EmailField(max_length=255)
  class Meta:
    model = User
    fields = ['email', 'password']

# class UserProfileSerializer(serializers.ModelSerializer):
#   class Meta:
#     model = User
#     fields = '__all__'



class AirportSerializer(serializers.ModelSerializer):
    class Meta:
        model = Airport
        fields = '__all__'

class FlightSerializer(serializers.ModelSerializer):
    class Meta:
        model = Flight
        fields = '__all__'

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model= User
        fields = '__all__'

class PassengerSerializer(serializers.ModelSerializer):
    user = UserSerializer(read_only=False)
    class Meta:
        model= Passenger
        fields = '__all__'

class BookingSerializer(serializers.ModelSerializer):
    class Meta:
        model= Booking
        fields = '__all__'


    

#admin.py

from django.contrib import admin
from .models import Airport, Booking, Flight, User, Passenger


from django.contrib.auth.admin import UserAdmin as BaseUserAdmin

class UserModelAdmin(BaseUserAdmin):
  # The fields to be used in displaying the User model.staff= models.BooleanField(default=False)
  # These override the definitions on the base UserModelAdmin
  # that reference specific fields on auth.User.
  list_display = ('id', 'email', 'name', 'is_admin','is_active')
  list_filter = ('is_admin',)
  fieldsets = (
      ('User Credentials', {'fields': ('email', 'password')}),
      ('Personal info', {'fields': ('name', 'contact_number', 'gender', 'dob','address', 'state', 'city', 'country', 'pincode',)}),
      ('Permissions', {'fields': ('is_admin',)}),
  )
  # add_fieldsets is not a standard ModelAdmin attribute. UserModelAdmin
  # overrides get_fieldsets to use this attribute when creating a user.
  add_fieldsets = (
      (None, {
          'classes': ('wide',),
          'fields': ('email', 'name', 'password1', 'password2',),
      }),
  )
  search_fields = ('email',)
  ordering = ('email', 'id')
  filter_horizontal = ()



# Register your models here.
admin.site.register(User,UserModelAdmin)
admin.site.register([Airport,Flight,Passenger,Booking])

#urls.py

from django.urls import path, include
from myapp.views import *
from rest_framework import routers





router = routers.DefaultRouter()
router.register('booking', BookViewSet, basename='MyModel')
urlpatterns = [

    path('register/', UserRegistrationView.as_view(), name='register'),
    path('login/', UserLoginView.as_view(), name='login'),
    path('profile/', UserProfileView.as_view(), name='profile'),
    path('flight/', FlightListCreateAPIView.as_view()),
    path('flight_info/<int:pk>/', FlightRetrtieveUpdateDestroyAPIView.as_view()),
    path('customer/', UserListCreateAPIView.as_view()),
    path('customer_info/<int:pk>/', UserRetrtieveUpdateDestroyAPIView.as_view()),
    path('passenger/', PassengerListCreateAPIView.as_view()),
    path('passenger_info/<int:pk>/', PassengerRetrtieveUpdateDestroyAPIView.as_view()),
    
    path('booking_info/<int:pk>/', BookingRetrtieveUpdateDestroyAPIView.as_view()),
    #path('booking/', BookingAPIView.as_view()),
    path('', include(router.urls)),
    

    
    
    
]


Проблема может заключаться в том, что вы выполнили миграцию до того, как создали абстрактную модель пользователя.

Для решения этой проблемы вам необходимо удалить все файлы и папки миграции
. Далее, в командной строке, в главном каталоге, вызовите команды миграции:
python3 manage.py makemigrations
then
python3 manage.py migrate

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