簡體   English   中英

序列化程序在 Django 3.1 中刪除數據

[英]Serializer removing data in Django 3.1

我正在嘗試驗證數據以存儲它。 但是序列化程序正在刪除有效字段。 這是我的代碼:

模型.py

class MyModel(models.Model): 
    user_id = models.UUIDField('action uid',default=uuid.uuid4,null=False,primary_key=True,blank=False,editable=False, unique=True)
    city = models.CharField('City', max_length=50, null=True, blank=True, editable=False)
    latitude = models.CharField('Latitude', max_length=50, null=True, blank=True, editable=False)
    longitude = models.CharField('Longitude', max_length=50, null=True, blank=True, editable=False)
    datetime = models.DateTimeField('datatime', null=False, blank=False, editable=False)

序列化程序.py

class MyModelSerializer(serializers.ModelSerializer):   
    class Meta:
        model = MyModel
        fields = '__all__'

查看.py

def save_my_data(self, request):
  user_info ={
    "user_id": resquest.user.user_uid,
    "city": resquest.user.city,
    "latitude": "17.6801",
    "longitude": "83.2016",
    "datetime": timezone.now()
  }
  serializer = serializers.MyModelSerializer(data=user_info)        
  serializer.is_valid(raise_exception=True) # Not error thrown.
  print( serializer.data ) # returns void

對此有什么想法嗎? 提前致謝。

您沒有調用序列化程序的.save()方法

serializer = serializers.MyModelSerializer(data=user_info)        
serializer.is_valid(raise_exception=True)

print("This is validated data, ", serializer.validated_data) serializer.save() print("This is saved data, ", serializer.data)

更新

一些模型字段設置為editable=False導致問題。 DRF 認為不應編輯這些字段,從而將這些字段變為read_only

所以,

方法一

刪除editable=False並遷移

class MyModel(models.Model):
    user_id = models.UUIDField(
        'action uid',
        default=uuid.uuid4,
        null=False,
        primary_key=True,
        blank=False,
        
  
 
  
   
   editable=False, 
  
        unique=True
    )
    # other fields

方法二

在序列化器類中顯式定義相應的字段

class MyModelSerializer(serializers.ModelSerializer):
    user_id = serializers.UUIDField() # other `editable=False` fields

    class Meta:
        model = MyModel
        fields = '__all__'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM