我的模型中有兩個必填字段,我想在我的ModelViewSet的pre_save方法中填充。儘管設置它們,但在提交.create()請求時,仍然會出現兩個字段都是必需的錯誤,因此無法創建我的對象。嘗試使用pre_save方法來填充必填字段
我做了一些這方面的研究,似乎它涉及到is_valid()檢查正在執行pre_save調用之前......每一些堆棧溢出文章推薦的解決方案,我發現:
Django REST Framework, pre_save() and serializer.is_valid(), how do they work?
Django REST Framework serializer field required=false
似乎是重寫get_validation_exclusions方法。但是,這似乎仍然沒有爲我工作......我在這一點上想它可能與我的模型繼承有關?任何幫助,你可以提供將不勝感激!這就是我的工作 -
serializers.py
class DaytimeSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Daytime
def get_validation_exclusions(self):
exclusions = super(DaytimeSerializer, self).get_validation_exclusions()
return exclusions + [ 'creation_datetime', 'creator_userprofile' ]
models.py
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='profile')
phone_number = models.CharField(max_length=12)
friends = models.ManyToManyField('self', related_name = 'friends')
field4 = models.CharField(max_length=300, blank=True)
def __unicode__(self):
return self.user.username + ' UserProfile'
class Activity(models.Model):
field1 = models.CharField(max_length=300)
field2 = models.CharField(max_length=300, blank=True)
creation_datetime = models.DateTimeField()
creator_userprofile = models.ForeignKey(UserProfile)
field3 = models.ManyToManyField('self')
field4 = models.BooleanField()
field5 = models.CharField(max_length=300, blank=True)
def __unicode__(self):
return self.field1 + ' | ' + self.creator_userprofile.user.username
class Meta:
abstract = True
class Daytime(Activity):
field6 = models.ManyToManyField(UserProfile, related_name='abc')
field7 = models.BooleanField()
myviewsfile.py
class DaytimeViewSet(viewsets.ModelViewSet):
queryset = Daytime.objects.all()
serializer_class = DaytimeSerializer
def pre_save(self, obj):
obj.creator_userprofile = UserProfile.objects.get(user__username = self.request.user)
obj.creation_datetime = timezone.now()
歡迎來到Stack Overflow。對於在本網站發佈的答案,最好不要依賴外部網站上的內容。也就是說,儘管可以發佈鏈接,但即使外部網站已關閉,已經關閉或更改,也可以預期答案對自己很有用。你認爲你可以編輯你的答案,包括你鏈接到的文檔的相關部分? – ivarni