python - Django - 从扩展用户模型中获取字段的查询集
问题描述
我有扩展用户的模型配置文件,我想“加入”用户模型以从中获取一些字段。我知道它不会加入,因为 Profile 是 User 的扩展,但我不确定如何使它工作。感谢您对此的任何帮助。
基本上,目标是从用户和配置文件中获取这些字段:用户名(来自用户)last_login(来自用户),last_activity(来自配置文件)以我视图的查询集形式。
模型.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
last_activity = models.DateTimeField(null=True, blank=True)
def __str__(self):
return self.user.username
序列化程序.py
class ProfileSerializer(serializers.ModelSerializer):
user = serializers.PrimaryKeyRelatedField(read_only=True) # <- this part not correct, but not sure how to treat User model here
class Meta:
model = Profile
fields = ('__all__')
视图.py
class ProfileList(ListAPIView):
queryset = Profile.objects.values('id', 'user__username', 'user__last_login', 'last_activity') # <- this isn't right, not sure what would be the correct way
serializer_class = ProfileSerializer
解决方案
您可以将其添加到models.py
from django.db.models.signals import post_save
from django.dispatch import receiver
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
last_activity = models.DateTimeField(null=True, blank=True)
def __str__(self):
return self.user.username
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
如果您想更改views.py中的某些内容,这是一个示例,您可以如何做到这一点:
from datetime import datetime
def update_profile(request, user_id):
user = User.objects.get(pk=user_id)
user.profile.last_activity = datetime.now()
user.save()
我这对你有帮助
推荐阅读
- python - 如何将 cmd-line 参数传递给 test_file (pytest) 中的方法?
- r - 使用列表对大型数据框进行子集化
- php - 如何使用html和php表单在sql表中添加多个数据
- asynchronous - @Async 注解正在创建线程,但只有一个线程正在承担所有负载
- c# - 使用 ServiceProxy.Create 连接到特定服务实例
- matlab - 在 Matlab 中并行运行 3 个 for 循环
- python-2.7 - 除了 .bin 之外,gensim 创建扩展名为 .bin.trainables.syn1neg.npy 和 .bin.wv.vectors.npy 的文件
- php - 在 PHP 中使用 file_get_contents 和 file_put_contents 的问题
- laravel - 如何检查我从与其他多个表相关的表中使用的 id?
- python - 将多个张量成对相乘 keras