【问题标题】:Django rest framework auto-populate filed with user.idDjango rest 框架使用 user.id 自动填充字段
【发布时间】:2014-03-26 17:28:06
【问题描述】:

我找不到自动填充模型的字段所有者的方法。我正在使用 DRF。如果我使用 ForeignKey,用户可以从下拉框中选择所有者,但这没有意义。PLZ帮助,我无法让它工作。views.py 不包含因为我认为与它无关。

models.py

class Note(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()
    cr_date = models.DateTimeField(auto_now_add=True)
    owner = models.CharField(max_length=100)
  # also tried:
  # owner = models.ForeignKey(User, related_name='entries')

class Meta:
    ordering = ('-cr_date',)

def __unicode__(self):
    return self.title

序列化器.py

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('id', "username", 'first_name', 'last_name', )

class NoteSerializer(serializers.ModelSerializer):
    owner = request.user.id <--- wrong , but is what a need.
    # also tried :
    # owner = UserSerializer(required=True)

    class Meta:
        model = Note
        fields = ('title', 'body' )

【问题讨论】:

    标签: python django rest auto-populate


    【解决方案1】:

    Django Rest Framework 提供了一个 pre_save() 方法(在通用视图和 mixins 中),您可以覆盖它。

    class NoteSerializer(serializers.ModelSerializer):
        owner = serializers.Field(source='owner.username') # Make sure owner is associated with the User model in your models.py
    

    然后在你的视图类中是这样的:

    def pre_save(self, obj):
        obj.owner = self.request.user
    

    参考文献

    http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions#associating-snippets-with-users

    https://github.com/tomchristie/django-rest-framework/issues/409#issuecomment-10428031

    【讨论】:

    • 伙伴非常感谢你。我知道这很简单,但我不知道 python。
    • 如果我需要使用UserSerializer 而不是serializers.Field,我该怎么做?
    猜你喜欢
    • 2021-10-19
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 2017-05-15
    • 2013-04-24
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    相关资源
    最近更新 更多