Django模型中的自定义字段

时间:2016-08-16 19:01:59

标签: python django

是否可以在django模型中使用自定义字段(非模型字段)。例如,我有以下模型:

class Patient(models.Model):
    firstName = models.CharField(max_length=100, blank=True, default='')
    lastName = models.CharField(max_length=100, blank=True, default='')
    occupation = models.CharField(max_length=100, blank=True, default='')
    gender = models.CharField(max_length=50, blank=True, default='')
    dateOfBirth = models.DateField(blank=True, default=date.today)
    address = AddressField(blank=True, null=True)

地址是非模型字段。我也有这个序列化器:

class PatientSerializer(serializers.Serializer):
    firstName = serializers.CharField()
    lastName = serializers.CharField()
    occupation = serializers.CharField()
    gender = serializers.CharField()
    dateOfBirth = serializers.DateField()
    address = serializers.SerializerMethodField()

    def create(self, validated_data):
        """
        Create and return a new patient
        """
        return Patient.objects.create(**validated_data)

    def get_address(self, obj):
        return obj.address

我尝试在序列化程序中将其设置为SerializerMethodField,但这不能正常工作,地址始终为null。 仅供参考,我使用Django-nonrel,因为我使用的是mongodb数据库。

1 个答案:

答案 0 :(得分:0)

为什么不使用该字段的editable属性? https://docs.djangoproject.com/en/1.10/ref/models/fields/#editable

class Patient(models.Model):
    firstName = models.CharField(max_length=100, blank=True, default='')
    lastName = models.CharField(max_length=100, blank=True, default='')
    occupation = models.CharField(max_length=100, blank=True, default='')
    gender = models.CharField(max_length=50, blank=True, default='')
    dateOfBirth = models.DateField(blank=True, default=date.today)
    address = AddressField(blank=True, null=True, editable=False)

希望这有帮助。