2016-08-16 4 views
0

カスタムフィールド(非モデルフィールド)を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です。 私はmongodbデータベースを使っているので、ちょうど情報として、私はDjango-nonrelを使用しています。

+0

AddressFieldとは何ですか? – masnun

+0

プライベート開発者(https://github.com/furious-luke/django-address)が開発したクラスです。 – Spider

答えて

0

なぜフィールドの編集可能な属性を使用しないのですか? 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) 

は、この情報がお役に立てば幸いです。

+0

これは残念ながら問題を解決しません。 – Spider

関連する問題