我正在尝试将用户表的id设置为成员表中的foriegn键,但我得到下面抛出的错误。我不能在这做什么?我好像不明白错误 的错误
Internal Server Error: /team/
Traceback (most recent call last):
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/views/generic/base.py", line 68, in view
return self.dispatch(request, *args, **kwargs)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/rest_framework/views.py", line 489, in dispatch
response = self.handle_exception(exc)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/rest_framework/views.py", line 449, in handle_exception
self.raise_uncaught_exception(exc)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/rest_framework/views.py", line 486, in dispatch
response = handler(request, *args, **kwargs)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/rest_framework/generics.py", line 244, in post
return self.create(request, *args, **kwargs)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/rest_framework/mixins.py", line 21, in create
self.perform_create(serializer)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/rest_framework/mixins.py", line 26, in perform_create
serializer.save()
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/rest_framework/serializers.py", line 215, in save
self.instance = self.create(validated_data)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/rest_framework/serializers.py", line 916, in create
instance = ModelClass.objects.create(**validated_data)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/db/models/query.py", line 394, in create
obj.save(force_insert=True, using=self.db)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/db/models/base.py", line 806, in save
force_update=force_update, update_fields=update_fields)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/db/models/base.py", line 836, in save_base
updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/db/models/base.py", line 922, in _save_table
result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/db/models/base.py", line 961, in _do_insert
using=using, raw=raw)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/db/models/query.py", line 1061, in _insert
return query.get_compiler(using=using).execute_sql(return_id)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 1099, in execute_sql
cursor.execute(sql, params)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/db/backends/utils.py", line 80, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/db/backends/utils.py", line 65, in execute
return self.cursor.execute(sql, params)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/db/utils.py", line 94, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/db/backends/utils.py", line 65, in execute
return self.cursor.execute(sql, params)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 101, in execute
return self.cursor.execute(query, args)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/MySQLdb/cursors.py", line 250, in execute
self.errorhandler(self, exc, value)
File "/Users/emmnock/Desktop/peaceAppProject/lib/python2.7/site-packages/MySQLdb/connections.py", line 50, in defaulterrorhandler
raise errorvalue
IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`peaceapp`.`peace_teammember`, CONSTRAINT `peace_teammember_owner_id_2c587836_fk_auth_user_id` FOREIGN KEY (`owner_id`) REFERENCES `auth_user` (`id`))')
模型
class PeaceHero(models.Model):
first_name = models.CharField(max_length=100, blank=False)
last_name= models.CharField(max_length=100, blank=False)
owner = models.ForeignKey('auth.User', related_name = 'peacehero', on_delete=models.CASCADE, default='1')
class TeamMember(models.Model):
first_name = models.CharField(max_length=100, blank=False)
last_name= models.CharField(max_length=100, blank=False)
owner = models.ForeignKey('auth.User', related_name = 'captain', on_delete=models.CASCADE, default='1')
serliazer
class PeaceHeroSerializer(serializers.HyperlinkedModelSerializer):
owner = serializers.ReadOnlyField(source='owner.id')
class Meta:
model = PeaceHero
fields = ('url','id', 'first_name','last_name','quote','owner')
class UserSerializer(serializers.HyperlinkedModelSerializer):
peacehero = serializers.HyperlinkedRelatedField(many=True, view_name='peacehero-detail', read_only=True)
captain = serializers.HyperlinkedRelatedField(many=True, view_name='team-details',read_only=True)
class Meta:
model = User
fields = ('url','id','username', 'password','peacehero','captain')
class TeamMemberSerializer(serializers.HyperlinkedModelSerializer):
owner = serializers.ReadOnlyField(source='owner.id')
class Meta:
model = TeamMember
fields = ('id','first_name','last_name','owner')
查看
class PeaceHeroList(generics.ListCreateAPIView):
queryset = PeaceHero.objects.all()
serializer_class = PeaceHeroSerializer
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
#retrieve or delete or update pece heroes.
class PeaceHeroDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = PeaceHero.objects.all()
serializer_class = PeaceHeroSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,
IsOwnerOrReadOnly,)
#list all registered users
class UserList(generics.ListCreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
#retrieve a user from database
class UserDetail(generics.RetrieveDestroyAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
#retrieve a team member
class TeamList(generics.ListCreateAPIView):
queryset = TeamMember.objects.all()
serializer_class = TeamMemberSerializer
答案 0 :(得分:0)
听起来peace_teammember
中有一行的owner_id
值没有auth_user
中的相应记录。
查找具有在users表中不存在的owner_id的团队成员。删除它们或创建相应的用户,然后创建外键。
答案 1 :(得分:0)
您正走在正确的道路上,但这是数据库期望与其各自用户owner id
的情况。我很确定你在项目后期迁移了peace_team成员。如果可能,删除表格并重试。