[英]Django - Queryset to get fields from extended User model
我有擴展 User 的模型 Profile,我想“加入” User 模型以從中獲取一些字段。 我知道它不會加入,因為 Profile 是 User 的擴展,但我不確定如何使其工作。 感謝您對此的任何幫助。
基本上,目標是從 User 和 Profile 獲取這些字段: username(來自 User)last_login(來自 User),last_activity(來自 Profile)以查詢集的形式供我查看。
模型.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()
我這對你有幫助
def profile(request):
profile = Profile.objects.get(user=request.user)
username = profile.user.username
last_login = profile.user.last_login
last_activity = profile.last_activity
return render(request, "user.html")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.