class Timings(models.Model):
Timings_to = models.TimeField(blank=True)
Timings_from = models.TimeField(blank=True)
def __str__(self):
return str(self.Timings_to) + '' + str(self.Timings_from)
class Temple(models.Model):
history = models.TextField(blank=False)
timings = models.ManyToManyField(Timings, blank=False, related_name='temple_timing')
establishment = models.CharField(max_length=20, choices=ESTABLISHMENT_CHOICE,
blank=True, default=None
)
我的問題我怎麼能寫串行這些類。我在Django非常新,休息。
Seiralizer:
class TimingsCreateUpdateSerializer(serializers.ModelSerializer):
""" Timing Serializer for create """
Timings_to = serializers.TimeField(format="%I:%M%p")
Timings_from = serializers.TimeField(format="%I:%M%p")
class Meta:
model = Timings
fields = ('id', 'Timings_to', 'Timings_from',)
read_only = ('id',)
class TempleSerializer(serializers.ModelSerializer):
timings = TimingsCreateUpdateSerializer(many=True)
class Meta:
model = Temple
fields = '__all__'
我嘗試重寫根據問題的REST API的機制的文檔創建方法。但它不起作用,請告訴我爲此模型編寫串行器類的正確方法。創建
def create(self, validated_data):
timings_data = validated_data.pop('timings')
temple = Temple.objects.create(**validated_data)
for time_data in timings_data:
Timings.objects.create(temple=temple, **time_data)
return temple
寺廟對象,但在 「Timings.objects.create(廟廟= ** time_data)」 顯示此錯誤
>>> serializer = TempleSerializer(data=data)
>>> serializer.is_valid()
True
>>> serializer.save()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Users\aryan\prabhat\anakonda\envs\sarvam\lib\site-packages\rest_framework\serializers.py", line 192, in save
self.instance = self.create(validated_data)
File "C:\Users\aryan\prabhat\sarvam_src\institute\serializers.py", line 103, in create
Timings.objects.create(temple=temple, **time_data)
File "C:\Users\aryan\prabhat\anakonda\envs\sarvam\lib\site-packages\django\db\models\manager.py", line 122, in manager
_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\aryan\prabhat\anakonda\envs\sarvam\lib\site-packages\django\db\models\query.py", line 399, in create
obj = self.model(**kwargs)
File "C:\Users\aryan\prabhat\anakonda\envs\sarvam\lib\site-packages\django\db\models\base.py", line 451, in __init__
raise TypeError("'%s' is an invalid keyword argument for this function" % list(kwargs)[0])
TypeError: 'temple' is an invalid keyword argument for this function
它表現出一定的錯誤,當我嘗試保存我的validated_data >>斯里alizerc.save() 回溯(最近通話最後一個): 在保存 self.instance = self.create(validated_data) 在創建 raise_errors_on_nested_writes( '創造',自主,validated_data) 在raise_errors_on_nested_writes CLASS_NAME =串行器。 __class ______ name__ AssertionError:'.create()'方法默認不支持可寫嵌套字段。 爲串行化程序「institute.serializers.TempleSerializer」編寫明確的'.create()'方法,或者在嵌套序列化程序字段中設置'read_only = True'。 – Aryan
您是否閱讀過[ModelSerializer]的這一部分(http://www.django-rest-framework.org/api-guide/serializers/#additional-keyword-arguments),您沒有正確定義您的創建方法,已經嘗試過它,它適用於我,嘗試通過書 – PetarP
如果我使用默認創建沒有重寫它是否工作? – Aryan