【发布时间】:2018-05-27 01:13:41
【问题描述】:
在我的应用程序中,我希望在创建用户配置文件时,同时创建另一个与用户配置文件 ID 关联的表。
我是 Django 新手。我试图在我的models.py和serializers.py中user.save()之后创建表,方法是找到当前的user_id
然后在我想使用用户配置文件创建的模型对象上调用create(owner=user_id),但它给了我list index out of range。
class UserProfileSerializer(serializers.ModelSerializer):
class Meta:
model = UserProfile
fields = ('id', 'email', 'name', 'password', )
extra_kwargs = {'password' : {'write_only' : True}}
def create(self, validated_data):
'''Creates and returns new user.'''
user = UserProfile(
email=validated_data['email'],
name=validated_data['name'],
)
user.set_password(validated_data['password'])
user.save()
"""here im trying to create the other tabel"""
user_id = UserProfile.objects.filter(email='email').values('id')[0]['id']
UserSessions.objects.create(owner_id=user_id)
return user
在我的 model.py 中:
class UserProfileManager(BaseUserManager):
"""Helps Django work with our custom user model."""
def create_user(self, email, name, password):
"""Create a new user profile object."""
if not email:
raise ValueError('Users must have an email address son!')
email = self.normalize_email(email)
user = self.model(email=email, name=name)
user.set_password(password)
user.save(using=self.db)
return user
class UserProfile(AbstractBaseUser, PermissionsMixin, models.Model):
"""Represent a user profile"""
email = models.EmailField(max_length=20, unique=True)
name = models.CharField(max_length=20)
objects = UserProfileManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['name']
在views.py中:
class UserProfileViewSet(viewsets.ModelViewSet):
"""Handles CRU."""
serializer_class = UserProfileSerializer
queryset = UserProfile.objects.all()
authentication_classes = (TokenAuthentication,)
permission_classes = (permissions.Update_own_profile,)
filter_backends = (filters.SearchFilter,)
search_fields = ('name', 'email', 'id')
我正在尝试使用 userprofile 添加此模型:
class UserSessions(models.Model):
sessions_list_id = models.ForeignKey('UserProfile', on_delete= models.CASCADE)
owner_id = models.CharField(max_length=2, default=0)
total_Sessions = models.IntegerField(default=0)
【问题讨论】:
-
更重要的是 - 为什么您需要
UserSession才能拥有与您的UserProfile相同的id? -
我需要一种方法来获取与特定
UserProfile相关联的UserSession,这样当客户发送他的 id 时我可以找到两者。
标签: python django sqlite data-structures django-rest-framework