所以我有以下这些模型:
class Leaderboard(models.Model):
pass
class Column(models.Model):
leaderboard = models.ForeignKey(Leaderboard, related_name="columns", on_delete=models.CASCADE)
related_columns = models.ManyToManyField(self)
index = models.PositiveIntegerField()
还有像这样的序列化器:
class ColumnSerializer(ModelSerializer):
related_columns = serializers.PrimaryKeyRelatedField(queryset=Column.objects.all(), many=True)
class Meta:
model = Column
fields = ('leaderboard', 'related_columns', 'index',)
class LeaderboardSerializer(ModelSerializer):
children = ColumnSerializer(many=True)
class Meta:
model = Leaderboard
fields = ('columns',)
我希望能够验证添加到 ColumnSerializer
的 related_columns
是否已经属于其父级 Leaderboard
。在创建 ColumnSerializer
时,我尝试访问 Leaderboard
或 Leaderboard ID (例如通过手动指定 fields
中的 id
)进行验证,但是在 Column 初始化之前,LeaderboardSerializer
未初始化,因此无法验证细节。
基本上,我想要修改 queryset=Column.objects.all()
为 queryset=self.instance.leaderboard.columns.all()
然而,在 Column
中我无法访问 Leaderboard
。例如,在 ColumnSerializer
中访问 self.parent.instance/initial
是 None
,直到在 Leaderboard.validate_columns()
中。我想到的一件事是只需在 Leaderboard 端执行验证,但是我仍然认为应该“可行”在 Column
中进行此验证,以防以后我想要直接编辑它们,而不必先通过 Leaderboard
…