Django-Foreingkey关系需要字段
我有以下两个模型之间的外键关系:Django-Foreingkey关系需要字段,django,serialization,model,deserialization,Django,Serialization,Model,Deserialization,我有以下两个模型之间的外键关系: class Text(models.Model): textcontent = models.CharField(max_length=100) class Comment(models.Model): text = models.ForeignKey(ModelA, on_delete=models.CASCADE,
class Text(models.Model):
textcontent = models.CharField(max_length=100)
class Comment(models.Model):
text = models.ForeignKey(ModelA,
on_delete=models.CASCADE,
null=True,
blank=True)
commentContent = models.CharField(max_length=100)
因此,一个文本可以有多个注释,但注释只分配给一个文本。
在serializers.py
中,我有以下内容:
class TextSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Text
fields = ('url',
'id',
'comment_set'
)
如您所见,我还想通过'comment\u set'
显示属于一个文本的注释集。
但是,当我创建一个文本实例(不提供注释)时,我会在命令行上看到以下内容:
“注释集”:[
“此字段为必填字段。”
],
为什么需要它?我已经将空白和空参数设置为true。
如何解决这个问题?您可以在meta类中设置,如下所示
class TextSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Text
fields = ('url', 'id', 'comment_set')
read_only_fields = ('comment_set',)
类TextSerializer(serializers.HyperlinkedModelSerializer):
类元:
模型=文本
字段=('url','id','comment\u set')
只读字段=('comment\u set',)
您可以在元类中设置,如下所示
class TextSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Text
fields = ('url', 'id', 'comment_set')
read_only_fields = ('comment_set',)
类TextSerializer(serializers.HyperlinkedModelSerializer):
类元:
模型=文本
字段=('url','id','comment\u set')
只读字段=('comment\u set',)
执行此操作时,是否可以稍后向创建的文本实例添加注释实例?comment\u set
是一种反向关系,您不能通过TextSerializer
创建comment
实例,除非您重写create()
方法,即使未引发错误,您也无法使用TextSerializer
创建Comment
实例。是的,但我的意思是:当我稍后通过CommentSerializer创建注释实例时,我可以将其与文本实例关联,对吗?此字段为只读的事实不会影响添加过程,对吗?是的。此只读不会影响添加过程,除非您尝试将数据放在同一字段中,这里是注释集
。您可以使用一个新字段,comment
来添加新数据。当我这样做时,我以后可以向创建的文本实例添加注释实例吗?comment\u set
是一种反向关系,您不能通过TextSerializer
创建comment
实例,除非您重写create()
方法。这意味着,即使未引发错误,您也无法使用TextSerializer
创建Comment
实例。是的,但我的意思是:当我稍后通过CommentSerializer创建注释实例时,我可以将其与文本实例关联,对吗?此字段为只读的事实不会影响添加过程,对吗?是的。此只读不会影响添加过程,除非您尝试将数据放在同一字段中,这里是注释集
。您可以使用新字段comment
添加新数据。