Http POST 动词返回空值“realtor_id”在从模型序列化数据时违反非空约束

问题描述 投票:0回答:1

我一直在尝试从我的房地产网络应用程序序列化数据,但每当我向后端发出 http POST 请求时,它都会在列中返回空值

realtor_id
违反非空约束。有人可以帮我解决这个问题吗?

模型.py

class Listing(models.Model):
      realtor = models.ForeignKey(Realtor, on_delete=models.DO_NOTHING)
      title = models.CharField(max_length=200)
      address = models.CharField(max_length=200)
      city = models.CharField(max_length=100)
      state = models.CharField(max_length=100)
      zipcode = models.CharField(max_length=20)
      description = models.TextField(blank=True)
      price = models.IntegerField()
      bedrooms = models.IntegerField()
      bathrooms = models.DecimalField(max_digits=2, decimal_places=1)
      garage = models.IntegerField(default=0)
      sqft = models.IntegerField()
      lot_size = models.DecimalField(max_digits=5, decimal_places=1)
      photo_main = models.ImageField(upload_to='photos/%Y/%m/%d/')
      photo_1 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
      photo_2 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
      photo_3 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
      photo_4 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
      photo_5 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
      photo_6 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
      is_published = models.BooleanField(default=True)
      list_date = models.DateTimeField(default=datetime.now, blank=True)
      def __str__(self):
          return self.title

serializer.py

class ListingSerializer(serializers.Serializer):
     pk = serializers.IntegerField(read_only=True)
     title = serializers.CharField(max_length=200)
     address = serializers.CharField(max_length=200)
     city = serializers.CharField(max_length=100)
     state = serializers.CharField(max_length=100)
     zipcode = serializers.CharField(max_length=20)
     price = serializers.IntegerField()
     bedrooms = serializers.IntegerField()
     bathrooms = serializers.DecimalField(max_digits=2, decimal_places=1)
     garage = serializers.IntegerField(default=0)
     sqft = serializers.IntegerField()
     lot_size = serializers.DecimalField(max_digits=5, decimal_places=1)
     description = serializers.CharField()
     list_date = serializers.DateTimeField()

    class Meta:
        model = Realtor
         fields = ['name']


   def create(self, validated_data):
         return Listing.objects.create(**validated_data)

serializer.py 的更新方法

def update(self, instance, validated_data):
    instance.realtor = validated_data.get('realtor',  instance.Realtor.name)
    instance.title = validated_data.get('title', instance.title)
    instance.address = validated_data.get('address', instance.address)
    instance.city = validated_data.get('city', instance.city)
    instance.state = validated_data.get('state', instance.state)
    instance.zipcode = validated_data.get('zipcode', instance.zipcode)
    instance.description = validated_data.get('description', instance.description)
    instance.description = validated_data.get('list_date', instance.list_date)
    instance.price = validated_data.get('price', instance.price)
    instance.bedrooms = validated_data.get('bedrooms', instance.bedrooms)
    instance.bathrooms = validated_data.get('bathrooms', instance.bathrooms)
    instance.garage = validated_data.get('garage', instance.garage)
    instance.sqft = validated_data.get('sqft', instance.sqft)
    instance.lot_size = validated_data.get('lot_size', instance.lot_size)

    instance.save()
    return instance

会不会是我的更新方法导致了这个错误?

django django-models django-rest-framework django-views django-serializer
1个回答
0
投票

instance.realtor = validated_data.get('realtor',       instance.Realtor.name)
... realtor 是一个外键,但在这里你引用了一个名字

© www.soinside.com 2019 - 2024. All rights reserved.