【问题标题】:Get username in model with extended user使用扩展用户获取模型中的用户名
【发布时间】:2020-06-24 20:49:59
【问题描述】:

目前,我在创建新文章时获取用户 ID。我还想在模型中包含用户名(我将 DRF 与 React 一起使用,因此它会为我节省一个仅针对用户名的获取请求)。

models.py:

class Article(models.Model):
    title = models.CharField(max_length=100)
    user = models.ForeignKey(
        User, related_name='Article', on_delete=models.CASCADE)

serializers.py:

class ArticleSerializer(serializers.ModelSerializer):
    user = serializers.PrimaryKeyRelatedField(
        read_only=True, default=serializers.CurrentUserDefault())

    class Meta:
        model = Article
        fields = ['id', 'title', 'user']

    def save(self, **kwargs):
        kwargs["user"] = self.fields["user"].get_default()
        return super().save(**kwargs)

【问题讨论】:

    标签: django django-models django-rest-framework serialization


    【解决方案1】:

    下面的代码应该从用户字段中获取用户名属性。

    getattr(self.fields['user'], self.fields['user'].USERNAME_FIELD)
    

    【讨论】:

      【解决方案2】:

      解决办法如下:

      class ArticleSerializer(serializers.ModelSerializer):
      user = PublicProfileSerializer(
          read_only=True, default=serializers.CurrentUserDefault())
      
      class Meta:
          model = Article
          fields = ['id', 'title', 'user']
      
      def save(self, **kwargs):
          kwargs["user"] = self.fields["user"].get_default()
          return super().save(**kwargs)
      

      使用 PublicProfileSerializer:

      from django.contrib.auth import get_user_model
      UserModel = get_user_model()
      
      class PublicProfileSerializer(serializers.ModelSerializer):
          class Meta:
              model = UserModel
              fields = [
                  "id",
                  "first_name",
                  "last_name",
                  "username",
              ]
      

      【讨论】:

        猜你喜欢
        • 2020-09-18
        • 2016-10-12
        • 2011-02-28
        • 2013-12-06
        • 2018-01-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多